Error a la hora de cerrar una conexion a Base de Datos
Es a la hora de cerrar una conexion me crea este error:
java.sql.SQLException: ResultSet is closed
uso el siguiente Driver
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
y mi codigo para cerrar la conexión es:
if(datos!=null)datos.close();
if(sentenciaSQL!=null) sentenciaSQL.close();
if(conexion!=null) conexion.close();
}
donde datos un una var de tipo ResultSet
sentenciaSQL de tipo Statement
conexion de tipo Connection
Todo se manda a llamar desde
modeloTabla.cerrar();
setVisible(false);
}});
donde modeloTabla.cerrar() es:
try{
if(datos2!=null) datos2.close();
if(con!=null) con.cerrarConexion();
System.out.println("Conexion Cerrada con exito");
}catch(java.sql.SQLException e){
e.printStackTrace();
}}
y el metodo cerrarConexion(); es el primer codigo que escribi.
a lo que entiendo yo, es que no puede cerrar la conexion de datos, por que Ya esta cerrado :S
lo cual no puede ser pues sino no entraría a en el if(datos!=null)
espero me puedan ayudar.
- Inicie sesión o regístrese para enviar comentarios
Hola slayerlp: Primero voy a
Hola slayerlp:
Primero voy a hacer una pequeña critica a tu codigo, tal vez este suponiendo algunas cosas erroneamente, espero que comprendas que solo trato de ayudar:
En el siguiente codigo:
Me da la sensacion de que estas revolviendo tu codigo, te recomendaria que mantuvieras la accion de cerrar la coneccion en dos metodos diferentes, uno por cada coneccion.
El siguiente ejemplo lo puedes tomar como una guia, fijate que al final, para cerrar las conexiones y similares, se usa un finally. Cuando existe un finally, independientemente de si hay un error o no, se ejecutaran las ordenes que existen dentro:
Statementable statement = null;
Connection conn = null;
ResultSet rs = null;
try{
// Aqui va la crear la conexion a la bd, consulta del rs, etc.
} finally {
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Controlar exception
e.printStackTrace();
}
}
try {
statement.close();
} catch (SQLException e) {
// TODO Controlar exception
e.printStackTrace();
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Controlar exception
e.printStackTrace();
}
}
}
}
Espero que te sirva.
muchas gracias, ahora mismo
muchas gracias, ahora mismo lo intentaré.
y no te detengas, critica el codigo, haz sugerencias, eso me hace mejorar como programador :)
EDIT:
ya lo resolvi, para aquellos que tengan el mismo problema solo era
poner el resultset como null
antes de cerrar la conexion, algo raro pero pues eso me resolvio el problema!
Con lo que comentaste me da
Con lo que comentaste me da la sensacion que debes verificar bien la logica de tu codigo.
null?
Puedes tener una conexión cerrada, y no es null. Son dos cosas distintas. En todo caso tu código debería ser
if (conexion != null && !conexion.isClosed()) conexion.close()
(no recuerdo si es isClosed() o isOpen(), isConnected() o algo asi).Mejor usa Spring JDBC
El uso correcto de JDBC es extremadamente complejo. Te recomiendo que mejor uses un framework como Spring-JDBC.
Saberlo hacer manualmente es bueno para entender los principios, pero en la practica, es demasiado facil equivocarse y saturar a la base de datos con conexiones no cerradas.