Sichere Rückgabe von Ergebnissätzen
Die Rückgabe eines Ergebnissatzes aus einer Datenbankabfrage kann aufgrund des Risikos von Ressourcenlecks eine komplexe Aufgabe sein. Hier gehen wir diese Herausforderung an, indem wir einen alternativen Ansatz zur effizienten Rückgabe der Daten untersuchen.
Problem:
Beim Versuch, eine Ergebnismenge direkt zurückzugeben, löst der Code eine aus java.sql.SQLException, da die Ergebnismenge nach der Ausführung der Methode geschlossen wird.
Lösung: Zuordnung zu JavaBeans
Anstatt die Ergebnismenge selbst zurückzugeben, ordnen Sie die Daten einer Sammlung von JavaBeans zu. Mit diesem Ansatz können Sie die Verbindung und die Anweisung offen halten, während Sie die Ergebnismenge durchlaufen. Hier ist ein Beispiel:
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; }
Try-with-Resources-Anweisung
Wenn Sie Java 7 oder höher verwenden, können Sie die Try-with-Resources-Anweisung verwenden Erklärung zur automatischen Ressourcenschließung:
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; }
Zusätzlich Überlegungen
Es ist wichtig, die Deklaration von Verbindung, Anweisung und Ergebnismenge als Instanzvariablen zu vermeiden (Threadsicherheitsproblem). Darüber hinaus ist es wichtig, SQLExceptions angemessen zu behandeln und Ressourcen in der richtigen Reihenfolge zu schließen. Wenn Sie diese Richtlinien befolgen, können Sie Ergebnismengen effektiv zurückgeben und gleichzeitig die Ressourcenverwaltung beibehalten.
Das obige ist der detaillierte Inhalt vonWie kann ich Datenbankergebnissätze in Java sicher zurückgeben und Ressourcenlecks vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!