Duda cierre de ResultSet
Recien inicio en el mundo Java por lo poco que he conocido me gusta, me ha surgido una duda
estoy con un proyecto que tiene como interfaz Extjs del lado del servidor ocupo servlets y unas clases para consultas.
mi duda es la siguiente:
desde el navegador lleno un grid con datos que me devuelve el servlet en formato json
el servlet recibe el parametro con la accion que debe realizar, crea una instancia de una clase para usar el metodo que hace la consulta
dicho método me devuelve un ResultSet, el servlet toma los datos del ResultSet y los mete en un objeto JSON y los envia al navegador.
al final en el servlet cierro la conexion y el ResultSet ¿Que pasa con el ResultSet que se queda en el metodo?¿se cierra al cerrar la conexion o queda abierto?
asi tengo el metodo que hace la consulta
public class claseSQL(){
public claseSQL(){} //constructor
public ResultSet getDatos(Connection con){
PreparedStatemend ps = null;
ResultSet rs = null;
try{
ps = con.preparedStatemend("mi query");
rs = ps.executeQuery();
//convierto a json
setMensaje(null);
}catch (SQLException ex){
setMensaje(ex.getMessage);
}catch(Exception e){
setMensaje(ex.getMessage);
}finally{
return rs;
}
}
asi está la estructura del servlet
[code]
procesrequest(request,response){
Connection con = null;
ResultSet rs = null;
claseSQL clsql = null;
try{
//obtengo conexion
//creo instancia de la claseSQL
clsql = new claseSQL();
rs = clsql.getDatos(con);
//convierto a json
}catch (SQLException ex){
}catch(Exception e){
}finally{
try{
if (rs!=null)
rs.close()
if(con!=null)
con.close;
}catch(Exception cc){}
//regreso JSON
}
}
[/code]
- Inicie sesión o regístrese para enviar comentarios
Se cierra
Se cierra no porque cierres la conexión sino porque tú lo estás cerrando primero en el finally.
Recuerda que cuando usas try-catch-finally (o incluso solamente try-finally), el código dentro del bloque de finally SIEMPRE se va a ejecutar.
Gracias por la respuesta
Gracias por la respuesta ezamudio, si yo lo cierro en el finally del servlet pero que pasa en el metodo que hace el query. Es decir en el metodo getDatos() de la clase claseSQL
No se cierra
Tu método getDatos() devuelve un ResultSet abierto. No tendría mucho caso que devolvieras un ResultSet cerrado.