Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan 'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup'?

Bagaimana untuk Menyelesaikan 'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup'?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 14:21:13269semak imbas

How to Solve

ResultSet Reuse Solution untuk "java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup"

Apabila menghadapi masalah "java.sql. SQLException: Operasi tidak dibenarkan selepas ralat ResultSet ditutup", ini menunjukkan bahawa beberapa set hasil sedang digunakan serentak daripada objek pernyataan yang sama. Ini melanggar jangkaan lalai kelas Penyata, yang membenarkan hanya satu ResultSet dibuka pada satu masa.

Untuk menyelesaikan isu ini dalam kod yang disediakan, langkah berikut perlu diambil:

Dalam kaedah getStuff():

  • ResultSet object rs mesti ditutup selepas mengekstrak data yang diperlukan untuk mengelakkan konflik dengan ResultSets yang lain.

Dalam kod panggilan:

  • Objek ResultSet rs juga mesti ditutup untuk melepaskan perkaitannya dengan objek pernyataan.
  • Objek PreparedStatement baharu harus dibuat untuk melaksanakan pertanyaan kemas kini. Ini memastikan bahawa objek ResultSet asal kekal tidak terjejas.

Kod yang diubah suai dengan pembetulan ini akan kelihatan seperti:

try {
    //Get some stuff
    String name = "";
    String sql = "SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;";
    ResultSet rs = statement.executeQuery(sql);
    if (rs.next()) {
        name = rs.getString("name");
    }
    rs.close();  // Close the ResultSet 'rs'

    String sql2 = "SELECT `id` FROM  `profiles` WHERE `id` =" + profId + ";";
    ResultSet rs2 = statement.executeQuery(sql2);
    String updateSql = "INSERT INTO `blah`............";
    PreparedStatement pst = (PreparedStatement) connection.prepareStatement(updateSql);

    while (rs2.next()) {
        int id = rs2.getInt("id");
        int stuff = getStuff(id);

        pst.setInt(1, stuff);
        pst.addBatch();
    }
    rs2.close();  // Close the ResultSet 'rs2'

    pst.executeBatch();

} catch (Exception e) {
    e.printStackTrace();
}

private int getStuff(int id) {

    try {
        String sql = "SELECT ......;";
        ResultSet rs = statement.executeQuery(sql);

        if (rs.next()) {
            int result = rs.getInt("something");
            rs.close();  // Close the ResultSet 'rs' in 'getStuff' method
            return result;
        }
        return -1;
    }//code continues
}

Dengan melaksanakan perubahan ini, kod memastikan semua ResultSets adalah ditutup dengan betul, menghalang "java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup" ralat.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan 'java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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