Sobes.tech
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ı, try bloğundan çıkıldıktan sonra, hata olsa bile garantili olarak kapatılır.
  • Temiz kod: finally bloğunda açıkça close() çağrısı yapmaya gerek kalmaz, bu da boilerplate kodu azaltır.
  • Hata yönetimi: Kaynak kapatılırken hata oluşursa, bu hata, try bloğ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.