Sobes.tech
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 try blokk 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 a finally blokkban, 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 try blokkban 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.