style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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:

public void cerrarConexion()throws SQLException{
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

addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){
modeloTabla.cerrar();
setVisible(false);
}});

donde modeloTabla.cerrar() es:

public void cerrar(){
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.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de beto.bateria

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:

if(con!=null) con.cerrarConexion();

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:

public String getObjects(DatabaseConnectable databaseConnectable) throws NamingException, SQLException, ParserConfigurationException, IOException, TransformerException{
                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!

Imagen de beto.bateria

Con lo que comentaste me da

Con lo que comentaste me da la sensacion que debes verificar bien la logica de tu codigo.

Imagen de ezamudio

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).

Imagen de luxspes

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.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">