Mengembalikan ResultSets Dengan Selamat
Mengembalikan set hasil daripada pertanyaan pangkalan data boleh menjadi tugas yang rumit kerana risiko kebocoran sumber. Di sini, kami menangani cabaran ini dengan meneroka pendekatan alternatif untuk memulangkan data dengan cekap.
Isu:
Apabila cuba mengembalikan set hasil secara langsung, kod itu melemparkan java.sql.SQLException kerana set keputusan ditutup selepas kaedah itu pelaksanaan.
Penyelesaian: Pemetaan ke JavaBeans
Daripada mengembalikan set hasil itu sendiri, petakan data kepada koleksi JavaBeans. Pendekatan ini membolehkan anda memastikan sambungan dan penyataan terbuka semasa melelaran melalui set hasil. Berikut ialah contoh:
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; }
Pernyataan Cuba-dengan-Sumber
Jika anda menggunakan Java 7 atau lebih baru, anda boleh menggunakan cuba-dengan-sumber penyata untuk penutupan sumber automatik:
public List<Biler> list() throws SQLException { List<Biler> bilers = new ArrayList<>(); 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; }
Tambahan Pertimbangan
Adalah penting untuk mengelakkan pengisytiharan sambungan, pernyataan dan set hasil sebagai pembolehubah contoh (isu keselamatan benang). Selain itu, adalah penting untuk mengendalikan SQLExceptions dengan sewajarnya dan menutup sumber dalam urutan yang betul. Dengan mengikut garis panduan ini, anda boleh mengembalikan set hasil dengan berkesan sambil mengekalkan pengurusan sumber.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengembalikan Set Hasil Pangkalan Data dengan Selamat di Java dan Mengelakkan Kebocoran Sumber?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!