Rumah > pangkalan data > tutorial mysql > Mengapa Saya Mendapat \'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup\' Apabila Menggunakan JDBC?

Mengapa Saya Mendapat \'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup\' Apabila Menggunakan JDBC?

DDD
Lepaskan: 2024-10-29 14:07:02
asal
974 orang telah melayarinya

Why Am I Getting

Java - Tidak Dapat Menggunakan ResultSet Selepas Sambungan Ditutup

Masalah:

Percubaan untuk laksanakan pertanyaan pangkalan data menggunakan JDBC menghasilkan ralat berikut:

java.sql.SQLException: Operation not allowed after ResultSet closed
Salin selepas log masuk

Analisis:

JDBC menggunakan objek ResultSet untuk mendapatkan semula data daripada pertanyaan. Walau bagaimanapun, apabila sambungan ke pangkalan data ditutup, objek ResultSet menjadi tidak sah dan tidak boleh digunakan lagi.

Penyelesaian:

Untuk menyelesaikan isu ini, elakkan lulus objek ResultSet di luar kaedah yang melaksanakan pertanyaan. Sebaliknya, gunakan ResultSet untuk mengisi objek atau senarai dan mengembalikan objek yang terhasil itu.

Contoh Kod dengan Populasi Objek:

<code class="java">public static Collection<T> sqlquery (String query, RowMapper<T> rowMapper) throws SQLException
{
    Connection connection=null;
    Statement st=null;
    ResultSet rs=null;     
    connection = DriverManager.getConnection("databaseadress","username","password");
    st = connection.createStatement();  
    rs = st.executeQuery(query);
    Collection<T> collection = new ArrayList<>();
    while (rs.next()) {
        collection.add(rowMapper.mapRow(rs));
    }
    // Close resources even if exceptions are thrown
    closeGracefully(rs, st, connection);
    return collection;
}</code>
Salin selepas log masuk

Menutup Sumber Dengan Anggun :

<code class="java">private static void closeGracefully(ResultSet rs, Statement st, Connection connection) {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
    if (st != null) {
        try {
            st.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
}</code>
Salin selepas log masuk

Pertimbangan Tambahan:

  • Gunakan pemeta baris untuk mencipta objek daripada setiap baris ResultSet.
  • Parameterkan pertanyaan untuk mengelakkan serangan suntikan SQL.
  • Pertimbangkan untuk menggunakan perpustakaan pihak ketiga seperti JDBC atau Spring JDBC untuk akses pangkalan data yang dipermudahkan.

Atas ialah kandungan terperinci Mengapa Saya Mendapat \'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup\' Apabila Menggunakan JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan