Sobes.tech
Junior

Cum să închizi corect conexiunea cu baza de date?

sobes.tech AI

Răspuns de la AI

Utilizând blocul try-with-resources.

// Declararea resurselor care vor fi închise automat
try (  
    Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Obținerea obiectului Connection
    Statement statement = connection.createStatement();  // Crearea obiectului Statement
    ResultSet resultSet = statement.executeQuery("SELECT 1") // Executarea interogării și obținerea ResultSet
) {  
    // Lucru cu datele din ResultSet sau efectuarea altor operații cu baza de date
    while (resultSet.next()) {  
        System.out.println(resultSet.getInt(1));  
    }  
} catch (SQLException e) {  
    // Tratarea excepțiilor posibile SQLException
    e.printStackTrace();  
}  

Avantajele acestei abordări:

  • Închiderea automată: Resursele (Connection, Statement, ResultSet) vor fi închise garantat după ieșirea din blocul try, chiar dacă apar excepții.
  • Cod curat: Nu necesită apeluri explicite close() în blocul finally, reducând boilerplate-ul.
  • Tratamentul excepțiilor: Dacă în timpul închiderii resursei apare o excepție, aceasta nu va fi suprimată de excepția apărută în interiorul blocului try.

Metoda alternativă, mai puțin recomandată, cu închidere explicită în 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");  
    // Lucru cu datele
    while (resultSet.next()) {  
        System.out.println(resultSet.getInt(1));  
    }  
} catch (SQLException e) {  
    e.printStackTrace();  
} finally {  
    // Închiderea explicită a resurselor în ordinea inversă
    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();  
        }  
    }  
}  

Această metodă este mai complicată și mai predispusă la erori, mai ales în gestionarea excepțiilor în timpul închiderii resurselor. Se recomandă utilizarea try-with-resources.