válida sólo sqlrecoverableexception resultados reenvío para operación last juego getmetadata cerrado java sql oracle jdbc

sólo - java.sql.SQLException: conjunto de resultados agotado



java sql sqlexception operación no válida para el juego de resultados de sólo reenvío last (9)

Cuando no hay registros devueltos de la base de datos para una condición particular y cuando intenté acceder a rs.getString (1); Tengo este error "conjunto de resultados agotado".

Antes del tema, mi código era:

rs.next(); sNr= rs.getString(1);

Después de la corrección:

while (rs.next()) { sNr = rs.getString(1); }

Recibo el error java.sql.SQLException: ResultSet agotado para ejecutar una consulta en una base de datos Oracle. La conexión es a través de un grupo de conexiones definido en Websphere. El código ejecutado es el siguiente:

if (rs! = null) ( while (rs.next ()) ( count = rs.getInt (1); ) )

Observo que el conjunto de resultados contiene datos (rs.next ())

Gracias


Esta excepción se produce cuando el ResultSet se usa fuera del bucle while. Mantenga todo el procesamiento relacionado con el ResultSet dentro del ciclo While.


Esto ocurre normalmente cuando se reutiliza el sttt pero esperando un ResultSet diferente, intente crear un nuevo stmt y executeQuery. ¡Lo arregló para mí!


He visto este error al intentar acceder a un valor de columna después de procesar el conjunto de resultados.

if (rs != null) { while (rs.next()) { count = rs.getInt(1); } count = rs.getInt(1); //this will throw Exhausted resultset }

Espero que esto te ayudará :)


Por favor, asegúrese de que res.getInt (1) no es nulo. Si puede ser nulo, use el número entero = nulo; y no cuenta int = 0;

Integer count = null; if (rs! = null) ( while (rs.next ()) ( count = rs.getInt (1); ) )


Prueba esto:

if (rs != null && rs.first()) { do { count = rs.getInt(1); } while (rs.next()); }


Recibirá este error porque está utilizando el conjunto de resultados antes que el método resultSet.next ().

Para obtener el conteo solo usa esto:

while (rs.next ()) `{count = rs.getInt (1); }

Obtendrá su resultado.


Si restablece el conjunto de resultados en la parte superior, utilizando rs.absolute(1) no obtendrá el conjunto de resultados agotado.

while (rs.next) { System.out.println(rs.getString(1)); } rs.absolute(1); System.out.println(rs.getString(1));

También puede usar rs.first () en lugar de rs.absolute (1), hace lo mismo.


Problema detrás del error: si está intentando acceder a la base de datos Oracle, no podrá acceder a los datos insertados hasta que la transacción haya sido exitosa y para completar la transacción debe iniciar una consulta de commit después de insertar los datos en la tabla. Debido a que la base de datos Oracle no está en modo de confirmación automática de forma predeterminada.

Solución:

Vaya a SQL PLUS y siga las siguientes consultas.

SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 28 15:29:43 2017 Copyright (c) 1982, 2010, Oracle. All rights reserved. Enter user-name: scott Enter password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> desc empdetails; Name Null? Type ----------------------------------------- -------- ---------------------------- ENO NUMBER(38) ENAME VARCHAR2(20) SAL FLOAT(126) SQL> insert into empdetails values(1010,''John'',45000.00); 1 row created. SQL> commit; Commit complete.