Java – Leyendo valores de un ResultSet despues de haber cerrado la conexion a la base de datos

abril 9, 2008

Cuando queremos leer datos de un ResultSet despues de haber cerrado la conexion (por ejemplo, si utilizamos una “Helper Class” para el acceso a datos), nos lanza una excepcion de tipo “java.sql.SQLException: Closed Connection: next”.
Para evitar esto hay que utilizar una clase que implemente la interfaz “CachedRowSet” tales como: “com.sun.rowset.CachedRowSetImpl” u “oracle.jdbc.rowset.OracleCachedRowSet”.
Si nos conectamos a una base de datos de Oracle debemos utilizar un OracleCachedRowSet porque si utilizamos un CachedRowSetImpl nos dara la excepcion java.lang.NumberFormatException: For input string: “4294967295” – que no nos da ninguna pista de lo que ocasiono el error –
Siempre hay mas compatibilidad entre tipos del mismo proveedor ya que muchas veces la implementacion de las interfaces varia. Y si nos fijamos bien, el ResultSet que nos regresa un executeQuery es de tipo OracleResultSetImpl, asi que se lleva mejor con el OracleCachedRowSet a la hora de llenarlo.
Bueno, aqui dejo un ejemplo de como utilizarlo:

ResultSet resultSet = null;
String campo1;
Integer campo2;
try {
String sql =
“SELECT * FROM TABLA”;
resultSet = executeQuery(sql);
if(resultSet.next()) {
campo1=resultSet.getString(“CAMPO1”);
campo2 = resultSet.getInt(“CAMPO2”);
}
resultSet.close();
} catch (Exception exc) {
throw new RuntimeException(exc);
}

public ResultSet executeQuery(String sql) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
OracleCachedRowSet cachedRowSet=null;
try {
Class.forName(“oracle.jdbc.OracleDriver”);
connection =
DriverManager.getConnection(databaseURL, databaseUserName,
databaseUserPassword);
connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
cachedRowSet=new OracleCachedRowSet();
cachedRowSet.populate(resultSet);
resultSet.close();
preparedStatement.close();
return cachedRowSet;
} catch (Exception exc) {
throw new RuntimeException(exc);
} finally {
try {
if ((connection != null) && (!connection.isClosed())) {
connection.close();
}
} catch (Exception exc) {
throw new RuntimeException(exc);
}
}
}

Anuncios

7 comentarios to “Java – Leyendo valores de un ResultSet despues de haber cerrado la conexion a la base de datos”

  1. Danny Arica Says:

    Buen datos, se me estaba haciendo dificil usar algo similar como a un datable en .NET.

    Saludos
    Gracias

  2. Juan Lopez Says:

    ….Este dato me ha sido de mucha utilidad durante mucho tiempo. Increible que trabajar con resultsets (retornarlos y pasarlos como parametros) se vuelva tan complicado sin saber esto. Gracias x el artículo, sigue regalandonos tips tan útiles como estos.

  3. mariela r Says:

    q bueno


  4. […] Java – Leyendo valores de un ResultSet despues de haber cerrado la conexion a la base de datos abril, 2008 3 comentários 3 […]

  5. cars2 Says:

    Excelente, gusto lo que necesitaba, gracias

  6. Luis chacon Says:

    muchísimas Gracias de verdad que me resulto Util


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: