Junior
Hogyan zárjuk le helyesen az adatbázis kapcsolatot?
sobes.tech MI
Válasz az MI-től
A try-with-resources blokk használata.
// Erőforrások deklarálása, amelyek automatikusan záródnak
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Connection objektum beszerzése
Statement statement = connection.createStatement(); // Statement objektum létrehozása
ResultSet resultSet = statement.executeQuery("SELECT 1") // Lekérdezés végrehajtása és ResultSet beszerzése
) {
// Munkavégzés a ResultSet adataival vagy más adatbázis műveletek
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Lehetséges SQLException kivételek kezelése
e.printStackTrace();
}
Ennek az megközelítésnek az előnyei:
- Automatikus zárás: A (Connection, Statement, ResultSet) erőforrások garantáltan záródnak a
tryblokk elhagyása után, még akkor is, ha kivétel történik. - Tiszta kód: Nincs szükség explicit
close()hívásokra afinallyblokkban, ez csökkenti a boilerplate kódot. - Kivételkezelés: Ha az erőforrás zárása közben kivétel keletkezik, az nem lesz elnyomva a
tryblokkban keletkezett kivétel által.
Alternatív, kevésbé ajánlott módszer, explicit zárással a finally blokkban:
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");
// Adatokkal való munka
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Erőforrások explicit zárása fordított sorrendben
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();
}
}
}
Ez a módszer bonyolultabb és hajlamosabb hibákra, különösen az erőforrások zárásakor fellépő kivételek kezelése során. A try-with-resources használata ajánlott.