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ả ResultSet
và PreparedStatement
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ự.