Junior
Como fechar corretamente a conexão com a base de dados?
sobes.tech IA
Resposta da IA
Utilizando o bloco try-with-resources.
// Declaração de recursos que serão fechados automaticamente
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Obtenção do objeto Connection
Statement statement = connection.createStatement(); // Criação do objeto Statement
ResultSet resultSet = statement.executeQuery("SELECT 1") // Execução da consulta e obtenção do ResultSet
) {
// Trabalhar com os dados do ResultSet ou realizar outras operações com a base de dados
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Tratamento de possíveis exceções SQLException
e.printStackTrace();
}
Vantagens desta abordagem:
- Fecho automático: Os recursos (Connection, Statement, ResultSet) serão garantidamente fechados após sair do bloco
try, mesmo que ocorram exceções. - Código limpo: Não requer chamadas explícitas a
close()no blocofinally, o que reduz a quantidade de código boilerplate. - Tratamento de exceções: Se ocorrer uma exceção ao fechar o recurso, ela não será suprimida pela exceção ocorrida dentro do bloco
try.
Método alternativo, menos preferido, com fecho explícito no bloco 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");
// Trabalhar com os dados
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Fecho explícito de recursos na ordem inversa à sua obtenção
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();
}
}
}
Este método é mais trabalhoso e propenso a erros, especialmente ao lidar com exceções durante o fechamento de recursos. Recomenda-se usar try-with-resources.