Theo documentation cho getResultSet
trong java.sql.Statement
, nó nói:getResultSet() "nên được gọi là chỉ một lần mỗi kết quả"
Lấy kết quả hiện tại như một đối tượng ResultSet. Phương pháp này nên chỉ được gọi một lần cho mỗi kết quả.
Sử dụng một số mã kiểm tra, tôi chạy executeQuery()
và một số cuộc gọi đến getResultSet()
và quan sát thấy rằng các ResultSet
trở chỉ vào cùng một đối tượng. Vì vậy, tôi đoán nó không trả lại một số khác nhau ResultSet
mà bạn sẽ cần phải đóng riêng. Nhưng tất nhiên điều này có thể là duy nhất đối với các trình điều khiển JDBC của tôi.
Nhìn vào documentation cho ResultSet
nó nói: đối tượng ResultSet
Một mặc định là không thể cập nhật và có một con trỏ mà di chuyển về phía trước mà thôi. Do đó, bạn chỉ có thể lặp qua nó một lần và chỉ từ hàng đầu tiên đến hàng cuối cùng.
Điều này có vẻ là lý do chính đáng tại sao bạn nên gọi nó nhiều lần vì điều này có thể dẫn đến một số tình huống "khó hiểu". Nếu đây là lý do duy nhất, tôi cảm thấy rằng họ có thể vừa mới nói vậy nên tôi nghĩ có thể có nhiều hơn thế.
Vì vậy, không ai biết tại sao một người không nên gọi số getResultSet
nhiều lần một lần cho mỗi kết quả? question là điều khiến tôi tò mò ngay từ đầu.
Không đăng câu trả lời này vì nó chỉ là linh cảm, nhưng tôi nghi ngờ đây là cách để các nhà phát triển trình điều khiển JDBC mất nhiều thời gian, cho phép họ không xác định điều gì xảy ra khi bạn gọi nó nhiều lần. Trong trường hợp cụ thể của bạn nó hoạt động, nhưng nếu bạn đã từng chuyển đổi các trình điều khiển JDBC nó có thể không. –
Tôi nghĩ nó đơn giản như vậy: đối tượng ResultSet có trạng thái. Chỉ có một đối tượng ResultSet là một thành viên của Tuyên bố. Bắt đối tượng không thực hiện lại câu lệnh. Bắt đối tượng lần thứ hai không được đảm bảo ở trạng thái giống như lần đầu tiên nhận được nếu bạn sửa đổi thứ gì đó sau lần đầu tiên nhận được. Vì vậy, nó chỉ là một sự thận trọng. Nhìn vào trình điều khiển jdbc của Postres (org.postgresql.jdbc2.AbstractJdbc2Statement), chúng ta có thể thấy rằng bên trong nó thực hiện nhiều cuộc gọi như thế này: return (result! = Null && result.getResultSet()! = Null); – Glenn