Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bắt java.sql.SQLException:Thao tác không được phép sau khi đóng ResultSet

Vấn đề là với cách bạn tìm nạp dữ liệu trong getStuff() . Mỗi lần bạn truy cập getStuff() bạn nhận được ResultSet mới nhưng bạn không đóng nó.

Điều này vi phạm kỳ vọng của Statement lớp (xem tại đây - http:// docs. oracle.com/javase/7/docs/api/java/sql/Statement.html ):

Theo mặc định, chỉ có thể mở một đối tượng ResultSet cho mỗi đối tượng Statement. Do đó, nếu việc đọc của một đối tượng ResultSet được xen kẽ với việc đọc của đối tượng khác, thì mỗi đối tượng phải được tạo ra bởi các đối tượng Statement khác nhau. Tất cả các phương thức thực thi trong giao diện Statement sẽ đóng một cách ngầm định đối tượng ResultSet hiện tại của một trạng thái nếu tồn tại một đối tượng đang mở.

Điều khiến mọi thứ thậm chí còn tồi tệ hơn là rs từ mã gọi điện. Nó cũng có nguồn gốc từ câu lệnh statement trường nhưng nó không bị đóng.

Điểm mấu chốt:bạn có một số ResultSet liên quan đến cùng một Statement đối tượng được mở đồng thời.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lộ trình học MySQL

  2. Nhận tổng số hàng khi sử dụng LIMIT?

  3. Ví dụ về SUBTIME () - MySQL

  4. LỖI 1148:Lệnh đã sử dụng không được phép với phiên bản MySQL này

  5. Cách nâng cấp MySQL trên CentOS