Mengembalikan ResultSet dalam Java
Mengakses jadual pangkalan data selalunya melibatkan pengambilan set hasil yang mengandungi berbilang baris data. Secara tradisinya, set hasil ini dikembalikan dan kemudiannya diulang untuk mengekstrak baris individu. Walau bagaimanapun, terdapat isu yang berpotensi dengan pendekatan ini.
Masalah Kebolehtutupan ResultSet
Salah satu cabaran dalam menguruskan set keputusan ialah kebolehtutupan yang wujud. Sebaik sahaja set keputusan ditutup, pernyataan dan sambungannya yang berkaitan juga ditutup, menjadikannya tidak boleh diakses untuk operasi selanjutnya. Ini boleh membawa kepada apa yang dipanggil ralat "Operasi tidak dibenarkan selepas ResultSet ditutup".
Penyelesaian: Pemetaan ke Koleksi
Untuk mengelakkan isu ini, adalah dinasihatkan untuk mengelak daripada memulangkan set hasil mentah dalam kaedah awam. Sebaliknya, pertimbangkan untuk memetakan set hasil kepada koleksi JavaBeans dan sebaliknya mengembalikan koleksi itu. Ini memastikan penyataan dan sambungan terbuka sehingga koleksi tidak lagi diperlukan, menghalang penutupan pramatang.
Berikut ialah contoh cara ini boleh dilaksanakan:
public List<Biler> list() throws SQLException { // Initialize connection, statement, and result set Connection connection = ... PreparedStatement statement = ... ResultSet resultSet = ... List<Biler> bilers = new ArrayList<>(); // Iterate over the result set and map rows to JavaBeans while (resultSet.next()) { Biler biler = new Biler(); // Set properties of the JavaBean from the result set ... bilers.add(biler); } return bilers; }
Dalam kod di atas, list() kaedah mengembalikan senarai objek JavaBean, setiap satu mewakili baris dalam jadual pangkalan data. Pendekatan ini memastikan sambungan dan pernyataan kekal terbuka sehingga koleksi yang dikembalikan tidak diperlukan lagi, menghapuskan potensi penutupan pramatang.
Menggunakan Cuba-dengan-Sumber
Java 7 memperkenalkan pernyataan cuba-dengan-sumber, yang memudahkan pengurusan sumber yang perlu ditutup. Dalam coretan kod di bawah, sambungan, pernyataan dan set hasil ditutup secara automatik pada penghujung blok percubaan:
public List<Biler> list() throws SQLException { try ( Connection connection = ... PreparedStatement statement = ... ResultSet resultSet = ... ) { // Iterate over the result set and map rows to JavaBeans ... } return bilers; }
Dengan menggunakan teknik ini, anda boleh mengendalikan set hasil dalam Java anda dengan selamat dan cekap kod, memastikan sumber pangkalan data diurus dengan betul dan mengelakkan kemungkinan pengecualian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan ResultSets dengan Selamat di Java untuk Mengelakkan Penutupan Pramatang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!