Sobes.tech
Junior

Hoe sluit je correct de verbinding met de database?

sobes.tech AI

Antwoord van AI

Gebruikmakend van de try-with-resources-blok.

// Declaratie van resources die automatisch worden gesloten
try (  
    Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Verkrijg Connection-object
    Statement statement = connection.createStatement();  // Maak Statement-object
    ResultSet resultSet = statement.executeQuery("SELECT 1") // Voer query uit en krijg ResultSet
) {  
    // Werken met gegevens uit ResultSet of andere databasebewerkingen
    while (resultSet.next()) {  
        System.out.println(resultSet.getInt(1));  
    }  
} catch (SQLException e) {  
    // Afhandeling van mogelijke SQLException
    e.printStackTrace();  
}  

Voordelen van deze aanpak:

  • Automatisch sluiten: Resources (Connection, Statement, ResultSet) worden gegarandeerd gesloten na het verlaten van de try, zelfs bij fouten.
  • Schone code: Geen expliciete close()-aanroepen in een finally-blok nodig, wat boilerplate-code vermindert.
  • Foutafhandeling: Als er een fout optreedt bij het sluiten van een resource, wordt deze niet onderdrukt door de fout die binnen de try-blok optrad.

Alternatief, minder aanbevolen methode, met expliciet sluiten in finally:

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");  
    // Werken met gegevens
    while (resultSet.next()) {  
        System.out.println(resultSet.getInt(1));  
    }  
} catch (SQLException e) {  
    e.printStackTrace();  
} finally {  
    // Handmatig sluiten van resources in omgekeerde volgorde
    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();  
        }  
    }  
}  

Deze methode is omslachtig en foutgevoelig, vooral bij het afhandelen van uitzonderingen tijdens het sluiten van resources. Het wordt aanbevolen try-with-resources te gebruiken.