Saltar al contenido

Cerrar conexiones de base de datos en Java

Es imprescindible interpretar el código de forma correcta antes de utilizarlo a tu trabajo si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

Cuando haya terminado de usar su Connectiondebe cerrarlo explícitamente llamando a su close() para liberar cualquier otro recurso de la base de datos (cursores, identificadores, etc.) que la conexión pueda estar reteniendo.

En realidad, el patrón seguro en Java es cerrar su ResultSet, Statementy Connection (en ese orden) en un finally bloquear cuando haya terminado con ellos. Algo como esto:

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;

try 
    // Do stuff
    ...

 catch (SQLException ex) 
    // Exception handling stuff
    ...
 finally 
    if (rs != null) 
        try 
            rs.close();
         catch (SQLException e)  /* Ignored */
    
    if (ps != null) 
        try 
            ps.close();
         catch (SQLException e)  /* Ignored */
    
    if (conn != null) 
        try 
            conn.close();
         catch (SQLException e)  /* Ignored */
    

Él finally bloque se puede mejorar ligeramente en (para evitar el null cheque):

} finally 
    try  rs.close();  catch (Exception e)  /* Ignored */ 
    try  ps.close();  catch (Exception e)  /* Ignored */ 
    try  conn.close();  catch (Exception e)  /* Ignored */ 

Pero, aún así, esto es extremadamente detallado, por lo que generalmente termina usando una clase auxiliar para cerrar los objetos en null-Métodos de ayuda seguros y el finally bloque se convierte en algo como esto:

} finally 
    DbUtils.closeQuietly(rs);
    DbUtils.closeQuietly(ps);
    DbUtils.closeQuietly(conn);

Y, en realidad, Apache Commons DbUtils tiene un DbUtils class que precisamente está haciendo eso, por lo que no hay necesidad de escribir el suyo propio.

Siempre es mejor cerrar los objetos de base de datos/recursos después de su uso. Mejor cierre la conexión, el conjunto de resultados y los objetos de declaración en el finally cuadra.

Hasta Java 7, todos estos recursos deben cerrarse mediante un finally cuadra. Si está utilizando Java 7, entonces para cerrar los recursos, puede hacer lo siguiente.

try(Connection con = getConnection(url, username, password, "org.postgresql.Driver");
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
) 

    // Statements

catch(....)

Ahora el con, stmt y rs los objetos pasan a formar parte del bloque de prueba y Java cierra automáticamente estos recursos después de su uso.

Basta con cerrar Statement y Connection. No es necesario cerrar explícitamente el ResultSet objeto.

La documentación de Java dice acerca de java.sql.ResultSet:

Un objeto ResultSet es cerrado automáticamente por el objeto Statement que lo generó cuando ese objeto Statement se cierra, se vuelve a ejecutar o se usa para recuperar el siguiente resultado de una secuencia de múltiples resultados.


Gracias BalusC por los comentarios: “No confiaría en eso. Algunos controladores JDBC fallan en eso”.

Te mostramos las comentarios y valoraciones de los usuarios

Recuerda que tienes concesión de decir si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *