Foros del Web » Programación para mayores de 30 ;) » Java »

Duda sobre Sql+java

Estas en el tema de Duda sobre Sql+java en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/09/2011, 20:12
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
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
  #2 (permalink)  
Antiguo 24/09/2011, 06:22
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
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!
  #3 (permalink)  
Antiguo 24/09/2011, 10:05
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Duda sobre Sql+java

Código:
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.
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?



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:
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 
¿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.
  #4 (permalink)  
Antiguo 24/09/2011, 19:03
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Duda sobre Sql+java

Cita:
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?
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.

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!
  #5 (permalink)  
Antiguo 24/09/2011, 19:06
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Duda sobre Sql+java

Cita:
Iniciado por javiDP Ver Mensaje
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.

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!
Lo malo es que Java 7 aun es muy reciente y no tiene tanto auge. :(
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:05.