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

Đóng ResultSet nhưng không đóng PreparedStatement

Rò rỉ sẽ là vấn đề con trỏ mở tối đa.

ORA-01000: maximum open cursors exceeded

Nếu vượt quá số con trỏ mở tối đa, cơ sở dữ liệu sẽ không sử dụng được, ngoại trừ các con trỏ đã được giữ. Tuy nhiên, hầu hết các trường hợp điều này xảy ra, các con trỏ được giữ thậm chí không được sử dụng (đó là trường hợp trong câu hỏi của bạn).

Kể từ java 7, cách tốt nhất để xử lý điều này là sử dụng thử với nguồn cung cấp . Cả ResultSetPreparedStatement triển khai AutoCloseable giao diện có nghĩa là chúng sẽ bị đóng khi không cần thiết nữa.

Nếu bạn không có java 7, thì bạn cần xử lý điều này trong finally nhưng hãy đảm bảo rằng bạn xác minh các giá trị null trước khi đóng nếu không, bạn có thể gặp phải NPE nếu nguồn điện lại chưa bao giờ được khởi tạo.

Lưu ý rằng việc đảo ngược sẽ không gây ra bất kỳ vấn đề nào vì việc đóng một câu lệnh sẽ tự động đóng bộ kết quả.

Lưu ý rằng bạn có thể dễ dàng cho phép nhiều con trỏ hơn vào ứng dụng của mình để ít có cơ hội vượt quá mức tối đa.

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;

Tuy nhiên, hầu hết thời gian nếu bạn gặp phải các con trỏ mở tối đa, đây không phải là một giải pháp vì nó chỉ che giấu sự cố thực sự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tách chuỗi thành nhiều hàng trong Oracle

  2. SID khác với tên dịch vụ như thế nào trong Oracle tnsnames.ora

  3. ResultSetMetaData getScale trả về 0

  4. Trả lại giá trị của cột nhận dạng sau khi chèn trong Oracle

  5. Ứng dụng gặp sự cố khi nói chuyện với oracle trừ khi đường dẫn thực thi chứa khoảng trắng