Junior
Comment fermer correctement la connexion à la base de données?
sobes.tech IA
Réponse de l'IA
En utilisant le bloc try-with-resources.
// Déclaration des ressources qui seront automatiquement fermées
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Obtention de l'objet Connection
Statement statement = connection.createStatement(); // Création de l'objet Statement
ResultSet resultSet = statement.executeQuery("SELECT 1") // Exécution de la requête et obtention du ResultSet
) {
// Travailler avec les données du ResultSet ou effectuer d'autres opérations avec la base de données
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Gestion des exceptions SQLException possibles
e.printStackTrace();
}
Avantages de cette approche :
- Fermeture automatique : Les ressources (Connection, Statement, ResultSet) seront garanties fermées après la sortie du bloc
try, même en cas d'exception. - Code propre : Ne nécessite pas d'appels explicites à
close()dans le blocfinally, ce qui réduit la quantité de code boilerplate. - Gestion des exceptions : Si une exception survient lors de la fermeture de la ressource, elle ne sera pas supprimée par l'exception survenue dans le bloc
try.
Méthode alternative, moins préférée, avec fermeture explicite dans le bloc 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");
// Travailler avec les données
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Fermeture explicite des ressources dans l'ordre inverse de leur obtention
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();
}
}
}
Cette méthode est plus encombrante et sujette à des erreurs, notamment lors de la gestion des exceptions lors de la fermeture des ressources. Il est recommandé d'utiliser try-with-resources.