Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menutup ResultSet tetapi tidak menutup PreparedStatement

Kebocoran akan menjadi masalah kursor terbuka maksimum.

ORA-01000: maximum open cursors exceeded

Jika kursor terbuka maksimum terlampaui, database akan menjadi tidak dapat digunakan, kecuali untuk kursor yang sudah ditahan. Namun, sebagian besar saat ini terjadi, kursor yang ditahan bahkan tidak digunakan (yang akan menjadi kasus dalam pertanyaan Anda).

Sejak Java 7, cara terbaik untuk menangani ini adalah dengan menggunakan coba dengan sumber daya . Keduanya ResultSet dan PreparedStatement mengimplementasikan AutoCloseable antarmuka yang berarti mereka akan ditutup saat tidak diperlukan lagi.

Jika Anda tidak memiliki Java 7, maka Anda perlu menangani ini di finally blok, tetapi pastikan Anda memverifikasi nilai nol sebelum menutup jika tidak, Anda mungkin menemukan NPE jika sumber daya tidak pernah diinisialisasi.

Perhatikan bahwa kebalikannya tidak akan menyebabkan masalah karena menutup pernyataan akan secara otomatis menutup kumpulan hasil.

Perhatikan bahwa Anda dapat dengan mudah mengizinkan lebih banyak kursor ke aplikasi Anda untuk mengurangi peluang melebihi maksimum.

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;

Namun, sebagian besar waktu jika Anda menemukan kursor terbuka maksimum, ini seharusnya tidak menjadi solusi karena hanya akan menyembunyikan masalah sebenarnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lewati hak istimewa tabel dan DENGAN GRANT OPTION dengan membuat tampilan

  2. Cara membagi satu kolom menjadi beberapa kolom

  3. Cara mendapatkan nilai untuk tanggal berikutnya dan berikutnya dalam sebuah tabel

  4. Mengubah NOT IN menjadi NOT EXISTS

  5. Setel batas waktu koneksi basis data dengan Python