Junior
Πώς κλείνετε σωστά τη σύνδεση με τη βάση δεδομένων;
sobes.tech AI
Απάντηση από AI
Χρησιμοποιώντας το μπλοκ try-with-resources.
// Δήλωση πόρων που θα κλείσουν αυτόματα
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Απόκτηση αντικειμένου Connection
Statement statement = connection.createStatement(); // Δημιουργία αντικειμένου Statement
ResultSet resultSet = statement.executeQuery("SELECT 1") // Εκτέλεση ερωτήματος και λήψη ResultSet
) {
// Εργασία με δεδομένα από το ResultSet ή άλλες λειτουργίες βάσης δεδομένων
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Διαχείριση πιθανών εξαιρέσεων SQLException
e.printStackTrace();
}
Πλεονεκτήματα αυτής της προσέγγισης:
- Αυτόματο κλείσιμο: Οι πόροι (Connection, Statement, ResultSet) θα κλείσουν εγγυημένα μετά την έξοδο από το μπλοκ
try, ακόμη και αν προκύψουν εξαιρέσεις. - Καθαρός κώδικας: Δεν απαιτούνται ρητές κλήσεις
close()στοfinally, μειώνοντας τον boilerplate κώδικα. - Διαχείριση εξαιρέσεων: Αν κατά το κλείσιμο πόρου προκύψει εξαίρεση, αυτή δεν θα καταπιεί την εξαίρεση που προκλήθηκε μέσα στο
try.
Εναλλακτική, λιγότερο προτιμώμενη μέθοδος, με ρητό κλείσιμο στο 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");
// Εργασία με δεδομένα
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Ρητό κλείσιμο πόρων με αντίστροφη σειρά
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();
}
}
}
Αυτή η μέθοδος είναι πιο πολύπλοκη και επιρρεπής σε σφάλματα, ειδικά κατά τη διαχείριση εξαιρέσεων κατά το κλείσιμο πόρων. Συνιστάται η χρήση του try-with-resources.