Junior
Veritabanı bağlantısı nasıl düzgün şekilde kapatılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
try-with-resources bloğu kullanarak.
// Otomatik olarak kapatılacak kaynakların bildirimi
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Connection nesnesi alınması
Statement statement = connection.createStatement(); // Statement nesnesi oluşturma
ResultSet resultSet = statement.executeQuery("SELECT 1") // Sorgu yürütme ve ResultSet alma
) {
// ResultSet'ten verilerle çalışma veya diğer veritabanı işlemleri
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Olası SQLException hatalarının işlenmesi
e.printStackTrace();
}
Bu yaklaşımın avantajları:
- Otomatik kapanma: (Connection, Statement, ResultSet) kaynakları,
trybloğundan çıkıldıktan sonra, hata olsa bile garantili olarak kapatılır. - Temiz kod:
finallybloğunda açıkçaclose()çağrısı yapmaya gerek kalmaz, bu da boilerplate kodu azaltır. - Hata yönetimi: Kaynak kapatılırken hata oluşursa, bu hata,
trybloğunda oluşan hatanın üzerine eklenmez.
Alternatif, daha az tercih edilen yöntem, finally bloğunda açık kapatma:
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");
// Verilerle çalışma
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Kaynakların açıkça kapatılması, ters sırayla
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();
}
}
}
Bu yöntem daha karmaşık ve hata yapmaya açıktır, özellikle kaynakların kapanması sırasında oluşan hatalar söz konusu olduğunda. try-with-resources kullanımı önerilir.