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 eenfinally-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.