Junior
Cum să închizi corect conexiunea cu baza de date?
sobes.tech AI
Răspuns de la AI
Utilizând blocul try-with-resources.
// Declararea resurselor care vor fi închise automat
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Obținerea obiectului Connection
Statement statement = connection.createStatement(); // Crearea obiectului Statement
ResultSet resultSet = statement.executeQuery("SELECT 1") // Executarea interogării și obținerea ResultSet
) {
// Lucru cu datele din ResultSet sau efectuarea altor operații cu baza de date
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Tratarea excepțiilor posibile SQLException
e.printStackTrace();
}
Avantajele acestei abordări:
- Închiderea automată: Resursele (Connection, Statement, ResultSet) vor fi închise garantat după ieșirea din blocul
try, chiar dacă apar excepții. - Cod curat: Nu necesită apeluri explicite
close()în bloculfinally, reducând boilerplate-ul. - Tratamentul excepțiilor: Dacă în timpul închiderii resursei apare o excepție, aceasta nu va fi suprimată de excepția apărută în interiorul blocului
try.
Metoda alternativă, mai puțin recomandată, cu închidere explicită în 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");
// Lucru cu datele
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Închiderea explicită a resurselor în ordinea inversă
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();
}
}
}
Această metodă este mai complicată și mai predispusă la erori, mai ales în gestionarea excepțiilor în timpul închiderii resurselor. Se recomandă utilizarea try-with-resources.