2010-08-17 48 views
19

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

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

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

Gracias

+0

Tiene la declaración o la conexión se cierre durante la lectura del conjunto de resultados? –

+2

@Arne: que preferiría haber arrojado una 'SQLException: ResultSet está cerrado'. – BalusC

+7

En el futuro, agregue stacktrace y señale la línea. Al ver la respuesta aceptada, la línea donde fue arrojada fue ** absolutamente no ** en el código que usted publicó en su pregunta. Debe practicar más con la interpretación de stacktraces. Borré mi respuesta – BalusC

Respuesta

29

tengo 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 
} 

Hope esto le ayudará a :)

+0

Simple y Claro, Gracias –

+0

¿creará la misma excepción para otras bases de datos (como mysql, sql server, etc.)? –

+0

No lo sé. Probablemente si. Supongo que depende del proveedor de la base de datos :-) – sourcerebels

4

Prueba esto:

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

Esto fallará si el conjunto de resultados es solo hacia adelante ... –

1

Esto ocurre típicamente cuando el stmt se reutiliza butexpecting un conjunto de resultados diferentes, intente una nueva creting stmt y executeQuery. ¡Lo arregló para mí!

2

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

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

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

0

Por favor haga sur que res.getInt (1) no es nulo. Si puede ser nulo, use Número entero = nulo; y no int count = 0;

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

Cuando no hay registros de regresar de base de datos para una condición particular y cuando intenté acceder a la rs.getString (1); Recibí este error "resultado agotado".

Antes de la emisión, el código fue:

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

Después de la revisión:

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

Esta excepción se produce cuando se utiliza el conjunto de resultados fuera del bucle while. Mantenga todos los procesos relacionados con ResultSet dentro del ciclo While.

0

problema detrás del error: Si está intentando acceder a la base de datos Oracle no será capaz de acceder a los datos insertados hasta que la transacción ha sido exitosa y para completar la transacción que tiene que disparar una consulta commit después de insertar los datos en la mesa. Porque la base de datos Oracle no está en el modo de confirmación automática de forma predeterminada.

Solución:

Ir 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. 
Cuestiones relacionadas