Junior
Kuidas õigesti sulgeda andmebaasiga ühendus?
sobes.tech AI
Vastus AI-lt
Kasutades try-with-resources plokki:
// Ressursside deklaratsioon, mis suletakse automaatselt
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Connection objekti saamine
Statement statement = connection.createStatement(); // Statement objekti loomine
ResultSet resultSet = statement.executeQuery("SELECT 1") // Päringu täitmine ja ResultSet saamine
) {
// Töö ResultSeti andmetega või teiste andmebaasi operatsioonidega
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Võimalike SQLException-de töötlemine
e.printStackTrace();
}
Selle lähenemise eelised:
- Automaatne sulgemine: Ressursid (Connection, Statement, ResultSet) suletakse garanteeritult pärast
tryploki väljasaamist, isegi kui tekib erind. - Puhtam kood: Ei nõua
close()väljakutsetfinallyplokis, mis vähendab boilerplate-koodi. - Erindite töötlemine: Kui ressursi sulgemise ajal tekib erind, ei varjata seda
tryplokis tekkinud erindi.
Alternatiivne, vähem soovitatav viis — selge sulgemine finally plokis:
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");
// Andmete töötlemine
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Ressursside selge sulgemine vastupidises järjekorras
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();
}
}
}
See meetod on mahukam ja suurema tõenäosusega vigu, eriti ressursside sulgemise ajal tekkivate erindite töötlemisel. Soovitatav on kasutada try-with-resources.