Sobes.tech
Junior

Wie schließt man die Verbindung zur Datenbank richtig?

sobes.tech KI

Antwort von AI

Verwendung des Blocks try-with-resources.

// Deklaration der Ressourcen, die automatisch geschlossen werden
try (  
    Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Verbindung erstellen
    Statement statement = connection.createStatement();  // Statement erstellen
    ResultSet resultSet = statement.executeQuery("SELECT 1") // Abfrage ausführen und ResultSet erhalten
) {  
    // Arbeiten mit den Daten im ResultSet oder andere Datenbankoperationen
    while (resultSet.next()) {  
        System.out.println(resultSet.getInt(1));  
    }  
} catch (SQLException e) {  
    // Behandlung möglicher SQLException
    e.printStackTrace();  
}  

Vorteile dieses Ansatzes:

  • Automatisches Schließen: Ressourcen (Connection, Statement, ResultSet) werden garantiert nach Verlassen des try-Blocks geschlossen, auch bei Ausnahmen.
  • Sauberer Code: Keine expliziten close()-Aufrufe im finally-Block notwendig, was Boilerplate-Code reduziert.
  • Fehlerbehandlung: Wenn beim Schließen der Ressource eine Ausnahme auftritt, wird diese nicht durch die im try-Block aufgetretene Ausnahme unterdrückt.

Alternativer, weniger bevorzugter Ansatz mit explizitem Schließen im finally-Block:

Connection connection = null;  
Statement statement = null;  
ResultSet resultSet = null;  

try {  
    connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", "");  
    statement = connection.createStatement();  
    resultSet = statement.executeQuery("SELECT 1");  
    // Arbeiten mit den Daten
    while (resultSet.next()) {  
        System.out.println(resultSet.getInt(1));  
    }  
} catch (SQLException e) {  
    e.printStackTrace();  
} finally {  
    // Explizites Schließen der Ressourcen in umgekehrter Reihenfolge
    if (resultSet != null) {  
        try {  
            resultSet.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
    if (statement != null) {  
        try {  
            statement.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
    if (connection != null) {  
        try {  
            connection.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
}  

Dieser Ansatz ist umständlich und fehleranfällig, insbesondere bei der Behandlung von Ausnahmen während des Schließens der Ressourcen. Die Verwendung von try-with-resources wird empfohlen.