Bagaimana untuk Mengelakkan `java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup` dalam Java?

Barbara Streisand
Lepaskan: 2024-11-27 03:09:10
asal
555 orang telah melayarinya

How to Avoid `java.sql.SQLException: Operation not allowed after ResultSet closed` in Java?

Mengembalikan ResultSet

Apabila menanyakan pangkalan data, adalah perlu untuk mengendalikan hasil yang dikembalikan dengan berkesan. Satu isu biasa timbul apabila cuba mengembalikan ResultSet daripada kaedah yang menanyakan pangkalan data. Walau bagaimanapun, mengembalikan ResultSet secara langsung boleh menyebabkan kebocoran sumber dan pengurusan sumber yang tidak betul.

Ralat "java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup" menunjukkan bahawa objek ResultSet telah ditutup sebelum kaedah itu boleh pulangkannya. Untuk menyelesaikan masalah ini, adalah disyorkan untuk memetakan ResultSet kepada koleksi Javabeans dan sebaliknya mengembalikannya. Pendekatan ini memastikan bahawa ResultSet ditutup secara automatik selepas digunakan, mengelakkan kebocoran sumber.

Contoh cara memetakan ResultSet kepada senarai Javabeans disediakan di bawah:

public List<Biler> list() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Biler> bilers = new ArrayList<Biler>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    return bilers;
}
Salin selepas log masuk

Dalam ini contoh, kaedah list() menanyakan pangkalan data, memetakan hasilnya kepada senarai objek Biler dan mengembalikan senarai. Ini memastikan bahawa ResultSet ditutup dengan betul dan menghalang kebocoran sumber.

Pendekatan lain ialah menggunakan pernyataan cuba-dengan-sumber, yang secara automatik menutup sumber apabila blok kod selesai:

public List<Biler> list() throws SQLException {
    List<Biler> bilers = new ArrayList<Biler>();

    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    }

    return bilers;
}
Salin selepas log masuk

Dengan mengikuti cadangan ini, pembangun boleh memastikan bahawa ResultSets dikendalikan dengan betul, mencegah kebocoran sumber dan memastikan akses pangkalan data yang cekap di Java aplikasi.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan `java.sql.SQLException: Operasi tidak dibenarkan selepas ResultSet ditutup` dalam Java?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan