Junior
Ako správne ukončiť spojenie s databázou?
sobes.tech AI
Odpoveď od AI
Použitie bloku try-with-resources.
// Vyhlásenie zdrojov, ktoré budú automaticky zatvorené
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Získanie objektu Connection
Statement statement = connection.createStatement(); // Vytvorenie objektu Statement
ResultSet resultSet = statement.executeQuery("SELECT 1") // Spustenie dotazu a získanie ResultSet
) {
// Práca s údajmi z ResultSet alebo vykonávanie iných operácií s databázou
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Spracovanie možných výnimiek SQLException
e.printStackTrace();
}
Výhody tohto prístupu:
- Automatické zatváranie: Zdroje (Connection, Statement, ResultSet) budú garantovane zatvorené po opustení bloku
try, aj keď dôjde k výnimke. - Čistý kód: Nevyžaduje explicitné volanie
close()v blokufinally, čo znižuje množstvo boilerplate kódu. - Spracovanie výnimiek: Ak počas zatvárania zdroja dôjde k výnimke, nebude potlačená výnimkou, ktorá vznikla vo vnútri bloku
try.
Alternatívny, menej preferovaný spôsob s explicitným zatváraním v bloku 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");
// Práca s údajmi
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Explicitné zatváranie zdrojov v opačnom poradí ich získania
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();
}
}
}
Tento spôsob je objemnejší a náchylnejší na chyby, najmä pri spracovaní výnimiek počas zatvárania zdrojov. Odporúča sa používať try-with-resources.