Contenido del curso
CRUD
- 7

Creación de Proyectos Java con Maven y Gestión de Dependencias
05:23 min - 8

Try-with-resources para cerrar conexiones JDBC
Viendo ahora - 9

Patrón DAO vs Repository en Java
03:12 min - 10

Patrón Repository con Singleton en Java
11:18 min - 11

Patrón Repository con JDBC en Java
20:24 min - 12

Insertar datos en MySQL con PreparedStatement
12:01 min - 13

Método delete en JDBC con PreparedStatement
07:00 min - 14

Interfaz gráfica de CRUD con Java Swing
10:01 min
Transacciones
Conexiones Pool
JPA y ORM
Próximos pasos
Try-with-resources para cerrar conexiones JDBC
Resumen
Cerrar recursos en JDBC es lo que evita fugas de memoria y conexiones colgadas en tu aplicación Java. Si trabajas con bases de datos, necesitas dominar dos formas de hacerlo: el bloque finally tradicional y el try-with-resources que llegó con Java 7. Aquí te explico ambas y cuándo conviene cada una.
¿Por qué debes cerrar los recursos en JDBC?
Cuando abres una conexión, ejecutas un statement y obtienes un ResultSet, esos objetos consumen memoria y mantienen recursos del sistema activos. Si no los cierras, tu aplicación empieza a acumular fugas que terminan afectando el rendimiento.
El método close() libera esos recursos. No es exclusivo de JDBC: lo aplicas en cualquier escenario donde manejes archivos, sockets o conexiones externas.
¿Qué hace el método close en JDBC? Libera la conexión, el statement y el ResultSet para que no queden consumiendo memoria ni bloqueando recursos del servidor de base de datos.
¿Cómo cerrar conexiones JDBC con finally?
La forma clásica es declarar tus credenciales en variables y cerrar cada recurso dentro de un bloque finally. Primero, en lugar de pasar la URL, el usuario y la contraseña directamente al DriverManager, los guardas en variables tipo String:
String urlcon la cadena de conexión.String usercon el nombre de usuario.String passwordcon la contraseña.
Luego pasas las tres variables al DriverManager.getConnection(url, user, password). Eso ya hace tu código más limpio.
¿Cómo se escribe el bloque finally para cerrar recursos?
Después del catch, agregas un finally con un if por cada recurso para verificar que no sea nulo antes de cerrarlo:
java finally { if (myRes != null) { myRes.close(); } if (myStmt != null) { myStmt.close(); } if (myCon != null) { myCon.close(); } }
Cada close() puede lanzar una SQLException, así que tienes que manejar esas excepciones también. Funciona, sí. Pero el código se vuelve largo, anidado y menos legible.
¿Qué es try-with-resources y cómo se usa en Java?
A partir de Java 7 llegó una característica llamada try-with-resources que automatiza el cierre de recursos. Se apoya en una interfaz llamada AutoCloseable: cualquier clase que la implemente se cierra sola al salir del try, ocurra o no una excepción.
Eso significa que ya no escribes el finally manualmente. El compilador lo hace por ti.
¿Qué es AutoCloseable en Java? Es una interfaz que permite a un objeto cerrarse automáticamente al salir de un bloque try-with-resources, sin necesidad de invocar close manualmente.
¿Cómo refactorizar el código JDBC con try-with-resources?
La idea es mover la declaración de Connection, Statement y ResultSet dentro de los paréntesis del try. Así:
java try ( Connection myCon = DriverManager.getConnection(url, user, password); Statement myStmt = myCon.createStatement(); ResultSet myRes = myStmt.executeQuery("SELECT * FROM employees") ) { // procesar resultados } catch (SQLException e) { e.printStackTrace(); }
Desaparece el finally. Desaparecen los if para validar nulos. Y los recursos se cierran automáticamente cuando termina el bloque.
¿Cuándo usar try-with-resources? Siempre que trabajes con clases que implementen AutoCloseable, como conexiones JDBC, streams de archivos o sockets. Hace el código más corto, legible y seguro frente a fugas.
¿Qué ventajas tiene try-with-resources frente a finally?
La diferencia se nota en tres puntos concretos:
- Menos líneas de código: eliminas el bloque
finallycompleto y los chequeos de nulo. - Mayor legibilidad: la intención queda clara desde la declaración del
try. - Menos errores: olvidar un
close()o manejar mal una excepción dentro delfinallydeja de ser un riesgo.
Un detalle al refactorizar: cuida los paréntesis y corchetes. Si te sobra uno, el compilador lanza un error como "class, interface, enum or record expected". Es la pista más común al migrar de finally a try-with-resources.
Con esto ya tienes la base para implementar el patrón repositorio sin preocuparte por fugas de recursos. ¿Te animas a refactorizar tu próxima conexión JDBC con esta técnica? Cuéntame en los comentarios cómo te fue.