Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat \'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup\' dalam Java JDBC?
Java: Ralat Menggunakan ResultSet selepas Penutupan Sambungan
Apabila cuba mendapatkan data daripada pangkalan data MySQL menggunakan JDBC, pengguna mungkin menghadapi ralat: "java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup." Ini berlaku apabila cuba menggunakan objek ResultSet selepas sambungan asas telah ditutup.
Penjelasan
JDBC beroperasi pada konsep pemuatan malas, di mana keputusan a pertanyaan tidak diambil sepenuhnya sehingga diminta. Objek ResultSet menyediakan kursor ke atas keputusan, membolehkan anda melelakannya. Walau bagaimanapun, menutup sambungan yang mencipta ResultSet juga akan menutup kursor, menjadikannya tidak boleh digunakan.
Penyelesaian
Untuk mengelakkan ralat ini, seseorang mesti memastikan sambungan terbuka sehingga ResultSet tidak lagi diperlukan atau menggunakan pendekatan yang berbeza.
Satu pendekatan yang disyorkan ialah menggunakan pemeta baris untuk menukar set hasil menjadi koleksi objek. Kaedah ini merangkumi proses penukaran dan membolehkan anda mengakses hasil walaupun selepas sambungan ditutup:
<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException { try (Connection connection = DriverManager.getConnection(...); Statement st = connection.createStatement(); ResultSet rs = st.executeQuery(query)) { List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } return list; } }</code>
Kod yang diubah suai ini menggunakan sumber cuba-dengan-untuk memastikan sambungan, pernyataan dan set hasil adalah ditutup secara automatik apabila kaedah selesai, menghapuskan kemungkinan terlupa untuk menutupnya secara manual. Selain itu, ia menggunakan pemeta baris untuk menukar setiap baris dalam set hasil menjadi objek terisi, yang kemudiannya boleh dikumpulkan ke dalam senarai.
Kesimpulan
Dengan pemahaman mekanisme pemuatan malas JDBC dan menggunakan pemeta baris, pembangun boleh mendapatkan semula data daripada pangkalan data dengan berkesan sambil mengelakkan ralat yang berkaitan dengan ResultSets tertutup selepas penutupan sambungan.
Atas ialah kandungan terperinci Mengapa Saya Mendapat \'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup\' dalam Java JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!