No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Java SE: SQL y Bases de Datos

Curso de Java SE: SQL y Bases de Datos

Ana Fernanda Gutierrez Villanueva

Ana Fernanda Gutierrez Villanueva

Optimización de recursos

8/22
Recursos

Es una buena práctica cerrar los recursos con el método close() después de usarlos para liberar los recursos utilizados. Esto se aplica a la programación JDBC con Java, así como a cualquier otra situación en la que se utilicen recursos del sistema, como archivos o sockets. Una forma común de hacerlo es usando el bloque finally para asegurarnos de que los recursos se cierren incluso si se produce una excepción en el código.

Otra forma introducida en Java 7 es usar la característica “Try with resources” que implementan la interfaz AutoCloseable o su subinterfaz Closeable. Antes de la introducción del “try con recursos”, era necesario cerrar manualmente los recursos abiertos utilizando bloques finally para asegurarse de que se liberaran correctamente, incluso en caso de excepciones. Sin embargo, esto puede ser propenso a errores y aumenta la cantidad de código necesario. Al utilizar esta estructura, los recursos declarados dentro del bloque try se cierran automáticamente al finalizar el bloque, ya sea que se haya producido una excepción o no.

Si tienes una clase que implementa la interfaz AutoCloseable o Closeable, no es necesario agregar manualmente la interfaz AutoCloseable en el código.

Aportes 13

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Método close(): Cerrar los recursos con el método close() después de usarlos para liberar los recursos utilizados

Algo que no dijo por si no notaron es que el main cambio cuando le dio clic al error en rojo, no lo había notado y pensé que me faltaba algo. Queda así: public static void main(String\[] args) throws SQLException
Al realizar el cierre usando finally no se deberia cerrar cada recurso, de esta manera? ![](https://static.platzi.com/media/user_upload/image-8c451cf3-1c9c-4c07-b924-c0711df391cc.jpg)
excelente este curso se ve que ya esta un poco mas actulizado
Solo me funcionan los if del finally cambiando el main asi: public static void main(String\[] args) throws SQLException. Me pueden explicar? Tengo el código igual
El IDE me deja hacerlo automáticamente ![](https://static.platzi.com/media/user_upload/image-9292fd29-28b5-4cb8-8f32-19a777ddd403.jpg)![](https://static.platzi.com/media/user_upload/image-c94d88f5-8ee6-40a2-be6a-4b4786f0c5c4.jpg)
No creo que se vea más legible, pero sí reduce líneas de código
Podemos ocupar la clausula close(), o también podemos ocupar la estructura package org.example.platzi; import java.sql.\*; *//TIP To \Run\ code, press \<shortcut actionId="Run"/> or* *// click the \<icon src="AllIcons.Actions.Execute"/> icon in the gutter.* public class Main { public static void main(String\[] args) { String url = "jdbc:mysql://localhost:3306/psqldb"; String user = "psqldb"; String password = "psqldb"; try ( *Connection* myConn = DriverManager.*getConnection*(url, user, password); *// Conexión automática* *PreparedStatement* myPstmt = myConn.prepareStatement("SELECT *\** FROM employees"); *// Sentencia preparada* *ResultSet* myRes = myPstmt.executeQuery() *// Ejecución de consulta* ** ) { System.out.println("¡Database connection successful!\n"); *// Procesar resultados* ** while (myRes.next()) { System.out.println(myRes.getString("first\_name") + "\nCorreo:" + " " + myRes.getString("email")); } } catch (SQLException e) { e.printStackTrace(); System.out.println("¡Conexión a la base de datos fallida!\n"); } } }**try-with-resources** que cierra en automático cualquier proceso que se encuentre abierto, incluso si ocurre una excepción, el código quedaría algo así,```js package org.example.platzi; import java.sql.*; //TIP To Run code, press <shortcut actionId="Run"/> or // click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter. public class Main { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/psqldb"; String user = "psqldb"; String password = "psqldb"; try ( Connection myConn = DriverManager.getConnection(url, user, password); // Conexión automática PreparedStatement myPstmt = myConn.prepareStatement("SELECT * FROM employees"); // Sentencia preparada ResultSet myRes = myPstmt.executeQuery() // Ejecución de consulta ) { System.out.println("¡Database connection successful!\n"); // Procesar resultados while (myRes.next()) { System.out.println(myRes.getString("first_name") + "\nCorreo:" + " " + myRes.getString("email")); } } catch (SQLException e) { e.printStackTrace(); System.out.println("¡Conexión a la base de datos fallida!\n"); } } } ```
perfect
package CAPAS.MAIN; import CAPAS.DATOS.PERSONA; import CAPAS.NEGOCIOS.CNPersona; import CAPAS.NEGOCIOS.Repositorio; import CAPAS.UTILITARIO.CONECTARBD; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { public static void main(String\[] args) { try(Connection myConn= CONECTARBD.getInstance()){ Repositorio\<PERSONA> repositorio =new CNPersona(); System.out.println("-------- IMPRIMIR TODOS LOS REGISTROS"); repositorio.LeerTodos().forEach(System.out::println); System.out.println("-------- IMPRIMIR EL SEGUNDO REGISTRO"); System.out.println(repositorio.LeerporId(2)); System.out.println("--------- AGREGAR UN EMPLEADO ---------"); PERSONA persona = new PERSONA(); persona.setIdPersona(9); persona.setNombrePersona("Patricio"); repositorio.Almacenar(persona); System.out.println("-------- IMPRIMIR TODOS LOS REGISTROS"); repositorio.LeerTodos().forEach(System.out::println); } catch (Exception e) { e.printStackTrace(); System.out.println("Se presento un error"); } } }
`Connection`, `Statement`**** y `ResultSet`**** extienden de `Wrapper`**** y `AutoCloseable`. Por eso no es necesario agregar manualmente la interfaz `AutoCloseable`**** en el código.
Cómo puedo implementar este mismo ejemplo usando no CreateStatement. Sino con prepareStatement?

Excelente