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; }
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; }
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!