Cuando realizo una conexion a una base de datos,¿ siempre debo cerrar los metodos Connection conexion ,Statement s ,ResultSet r?
conexion.close();,s.close,r.close().
¿Que podria suceder en una aplicacion si no cierro los metodos?
gracias
| |||
Duda sobre Sql+java Cuando realizo una conexion a una base de datos,¿ siempre debo cerrar los metodos Connection conexion ,Statement s ,ResultSet r? conexion.close();,s.close,r.close(). ¿Que podria suceder en una aplicacion si no cierro los metodos? gracias |
| |||
Respuesta: Duda sobre Sql+java Si, se recomienda siempre cerrar las conexiones y transacciones, mas que nada por que si se usa mucho la clase donde tienes la conexion sin cerrar, puede darte problemas de exceso de conexiones abiertas, y tendrias que parar tu aplicacion y volverla a iniciar. Igualmente tendria que ser un uso bastante continuado...porque las conexiones llevan implicitas un timeout, en el que si la conexion no tiene transacciones, la base de datos la cierra automaticamente. Pero por seguridad y por evitar futuros problemas, se aconseja siempre cerrarlas. Otra cosa seria que tuvieses un pool de conexiones, entonces no seria necesario cerrar ninguna, pues es el pool quien se encarga de tener X conexiones abiertas para minimizar tiempo de interaccion con la base de datos. Pero claro, estamos hablando de cosas distintas, ya que el pool tiene X conexiones asignadas y de ahi no va a pasar. Un saludo! |
| |||
Respuesta: Duda sobre Sql+java
Código:
Gracias por la respuesta. Si, se recomienda siempre cerrar las conexiones y transacciones, mas que nada por que si se usa mucho la clase donde tienes la conexion sin cerrar, puede darte problemas de exceso de conexiones abiertas, y tendrias que parar tu aplicacion y volverla a iniciar. Al darme exceso de conexiones quiere decir que mi aplicacion quedaria saturada, por lo tanto se volveria lenta y podria bloquearse. ¿estoy correcto?
Código:
Igualmente tendria que ser un uso bastante continuado... porque las conexiones llevan implicitas un timeout, en el que si la conexion no tiene transacciones, la base de datos la cierra automaticamente. Pero por seguridad y por evitar futuros problemas, se aconseja siempre cerrarlas.
Código:
¿Crees que esta nueva caracteristica del jdk7 sea más segura? ya que te evita los cierres manuales, porque declaras los recursos en el try. Gestión automática de recursos Un "recurso" es un objeto que tiene que cerrarse manualmente, como ser java.io.InputStream, OutputStream, Reader, Writer, Formatter; java.nio.Channel;java.net.socket; java.sql.Connection, Statement, ResultSet entre otros. Estos recursos se suelen abrir en un bloque try y cerrar en un finally. La gestión automática de rcursos es una forma especial del operador try en donde se declaran uno o más recursos. El alcance de estos recursos está limitado al bloque. Cuando el bloque termina, sea de forma normal o abrupta, todos los recursos declarados se cierran automáticamente. La principal ventaja es que se elimina la necesidad del cierre manual, y los posibles errores que eso provoca. Además, se "evita" la segunda excepción (la del close()), dejando siempre la excepción del bloque que suele ser más interesante. Un ejemplo de uso sería: Como vemos, el bloque try() declara un recurso, el luego es utilizado dentro del bloque. Al finalizar, se cerrará automáticamente. También es posible declarar más de un recurso: try (InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest)) { byte[] buf = new byte[8192]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } http://www.dosideas.com/noticias/jav...del-jdk-7.html |
| |||
Respuesta: Duda sobre Sql+java Cita: Tu aplicacion en si misma no, las consultas que hace a la base de datos son las que darian excepciones por exceso de conexiones y no podria obtener o escribir nada en la base de datos hasta que se liberen las conexiones abiertas que no se han cerrado.Gracias por la respuesta. Al darme exceso de conexiones quiere decir que mi aplicacion quedaria saturada, por lo tanto se volveria lenta y podria bloquearse. ¿estoy correcto? Esa funcionalidad de java 7 esta pensada para que no haya equivocaciones ni olvidos a la hora de conectar con la base de datos, vamos, lo que viene siendo una ayudita para los que se olvidan de hacer un close(). Un saludo! |