Apabila bekerja dengan pangkalan data, selalunya perlu untuk mendapatkan semula data dan memanipulasinya dalam aplikasi kami. Satu cara untuk melakukan ini ialah dengan menggunakan ResultSet, yang menyediakan akses kepada keputusan pangkalan data. Walau bagaimanapun, mengembalikan ResultSet secara langsung boleh mempunyai had tertentu.
Dalam kod yang disediakan:
public ResultSet select() { ... return rs; }
Kaedah ini cuba mengembalikan rujukan ResultSet. Walau bagaimanapun, pendekatan ini boleh membawa kepada masalah kebocoran sumber kerana ia memastikan kenyataan dan sambungan tetap terbuka, menghalang pelepasan awal mereka.
Untuk mengatasi batasan ini, pendekatan yang lebih baik adalah untuk memetakan ResultSet kepada koleksi JavaBeans, yang kemudiannya boleh dikembalikan sebagai senarai. Kaedah ini memastikan sumber pangkalan data ditutup dengan betul dan menghalang kebocoran sumber.
Berikut ialah kod yang disemak yang melaksanakan pendekatan ini:
public List<Biler> list() throws SQLException { Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; List<Biler> bilers = new ArrayList<>(); 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; }
Kaedah yang disemak ini mengembalikan senarai objek Biler, yang kemudiannya boleh dimanipulasi oleh aplikasi tanpa kebimbangan kebocoran sumber yang berkaitan dengan pengembalian terus a ResultSet.
Selain pendekatan yang diterangkan di atas, kod yang disemak juga termasuk beberapa penambahbaikan:
Dengan mengamalkan amalan ini, interaksi pangkalan data anda akan menjadi lebih teguh, boleh diselenggara dan persembahan.
Atas ialah kandungan terperinci Mengapa Mengembalikan ResultSet Terus daripada Pertanyaan Pangkalan Data Idea Buruk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!