Mặc dù vòng lặp while của bạn lặp lại trên toàn bộ ResultSet
, hàm sẽ chỉ trả về cột cuối cùng trong một ràng buộc FK vì trên mỗi lần lặp lại, bạn ghi đè giá trị của lần lặp trước đó (fkTableData = rs.getString(i);
). Btw:`fkTableData thực sự phải là một biến cục bộ của phương thức, không phải là một biến cá thể.
Hàm của bạn sẽ trả về một List<String>
không phải là String
.
Ngoài ra:bạn đang gọi getImportedKeys()
một lần cho mỗi cột trong ResultSet. Điều đó là cực kỳ kém hiệu quả. Nếu bạn đang sử dụng Oracle, bạn sẽ nhận thấy điều đó ngay lập tức vì việc truy xuất thông tin FK ở đó cực kỳ chậm (Postgres nhanh hơn nhiều khi truy cập danh mục hệ thống).
Dưới dạng getImportedKeys()
trả về một hàng cho mỗi FK cột bạn cũng cần thu thập tất cả các hàng thuộc về một định nghĩa ràng buộc duy nhất (tức là cho một kết hợp bảng cha / con).
Có lẽ điều tốt nhất là định nghĩa một lớp PkDefinition
lưu trữ tất cả các cột liên quan và tên bảng có liên quan và hàm của bạn trả về List<PkDefinition>
để tránh nhiều lệnh gọi cho cùng một hàng tập hợp kết quả.