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

Cerrar ResultSet

Estas en el tema de Cerrar ResultSet en el foro de Java en Foros del Web. Hola amigos. TEngo un problema existencial con una clase de conexion en java. Esta clase crea la conexion a través de un método estatico llamado ...
  #1 (permalink)  
Antiguo 10/08/2007, 13:03
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Mensaje Cerrar ResultSet

Hola amigos.

TEngo un problema existencial con una clase de conexion en java. Esta clase crea la conexion a través de un método estatico llamado conectar entonces tengo Conexion.conectar().

El problema es que tengo otro metodo Conexion.consultar(String sql) que devuelve un ResultSet. Este resultset nunca se cierra ya que si lo cierro no podrìa ser devuelto en el metodo y necesito el ResultSet dentro de la aplicación para formar tablas o hacer otras operaciones.

Como se debería mantener esto? Creo que debría haber una mejor manera de hacer para que se pueda cerrar el ResultSet.
  #2 (permalink)  
Antiguo 10/08/2007, 16:50
 
Fecha de Ingreso: mayo-2006
Mensajes: 137
Antigüedad: 18 años
Puntos: 1
Re: Cerrar ResultSet

cómo lo tiene declarado?.

Supongamos que esta asi: public ResultSet rss;

Solo le das rss.close(); y ya.
  #3 (permalink)  
Antiguo 10/08/2007, 18:25
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Mensaje Re: Cerrar ResultSet

Claro. Se como cerrarlo. Lo que pasa es que tengo por ejemplo dos clases.

Conexion y Principal

En conexion está mi método que devuelve el ResultSet que es llamado desde Principal lo que quiere decir que no lo puede cerrar en la clase Conexion. porque si lo cierro me devuelve null.

En Principal tengo asi.

ResultSet rs = Conexion.consultar(sSQL);

Una referencia viene a mi variable rs en Principal y ese si lo puedo cerrar pero no puedo cerrar el que queda abierto en Conexion. Me explico?
  #4 (permalink)  
Antiguo 11/08/2007, 04:55
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Cerrar ResultSet

Si no he entendido mal, en realidad son el mismo ya que lo que tu devuelves es una referencia al mismo ResultSet, no una copia, asi que no hay dos. Con cerrar el que devuelves basta.

S!

PD: De todas formas, con ese diseño dependes de que el codigo externo que llames cierre el ResultSet, lo cual puede presentar problemas de mantenibilidad.
  #5 (permalink)  
Antiguo 11/08/2007, 07:42
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Cerrar ResultSet

Tienes razón GreenEyed lo estaba mirando como una copia pero el metodo close() es del objeto que reside en memoria.

Y de que otra manera puedo diseñar esto? para tener un metodo que haga las consultas y no tener que hacerlas siempre desde el Statement y todo lo que implica?
  #6 (permalink)  
Antiguo 11/08/2007, 16:05
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Cerrar ResultSet

Ummm depende.

Se puede por ejemplo devolver un List de los objetos que devuelve el resultSet. Y para cada objeto usar un Map (campo,valor), por ejemplo.

O dejar que sean los metodos los que ejecuten sus propias consultas y asi abran y cierren sus resultSet.

O dependiendo de lo que suelas hacer con esos metodos, puedes hacer un metodo generico que ejecute la consulta, le pase el ResultSet a algo que tu implementes y que luego cierre el ResultSet. Algo así como el "Action Pattern".

Cada uno tiene sus ventajas e inconvenientes, y es cuestion de elegir. Yo para mis accesos a BDD, suelo usar el último pero me sirve por que se que siempre devuelvo en mis metodos el mismo tipo de valores.

S!
  #7 (permalink)  
Antiguo 13/08/2007, 00:41
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: Cerrar ResultSet

Cita:
Iniciado por GreenEyed Ver Mensaje
O dependiendo de lo que suelas hacer con esos metodos, puedes hacer un metodo generico que ejecute la consulta, le pase el ResultSet a algo que tu implementes y que luego cierre el ResultSet.
Wenas.

O una clase que se encargue de la BD. ejecute la sentencia y te devuelva un arraylist o un vector o algo similar.

Tu llamaras a esa clase con una sentencia sql y recibiras el arraylist.

Esta clase creara la conexion, ejecutara la consulta y cerrara la conexion.

La idea es que tu clase de negocio le importe un flautin como se obtengan los resultados, y no tenga que preocuparse de resultsets ni historias.


Saludos.
  #8 (permalink)  
Antiguo 13/08/2007, 11:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Cerrar ResultSet

Cita:
Iniciado por elAntonie Ver Mensaje
Wenas.

O una clase que se encargue de la BD. ejecute la sentencia y te devuelva un arraylist o un vector o algo similar.

Tu llamaras a esa clase con una sentencia sql y recibiras el arraylist.

Esta clase creara la conexion, ejecutara la consulta y cerrara la conexion.

La idea es que tu clase de negocio le importe un flautin como se obtengan los resultados, y no tenga que preocuparse de resultsets ni historias.


Saludos.
Esa es la primera opción que he puesto . De cualquier forma, la idea es que dado que es un codigo que se va a ejecutar muchas veces y tiene una parte "sensible" como es el tratamiento de las conexiones, puedas "garantizar" que siempre se hace el tratamiento correcto.

S!
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 16:57.