it-swarm.com.de

java.sql.SQLException: Erschöpfte Ergebnismenge

Ich erhalte den Fehler Java.sql.SQLException: Exhausted ResultSet , um eine Abfrage gegen eine Oracle-Datenbank auszuführen. Die Verbindung erfolgt über einen in Websphere definierten Verbindungspool. Der ausgeführte Code lautet wie folgt:

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

Ich stelle fest, dass das Resultset Daten enthält (rs.next ()).

Vielen Dank

21
Mon

Ich habe diesen Fehler beim Versuch festgestellt, auf einen Spaltenwert zuzugreifen, nachdem das Resultset verarbeitet wurde.

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

Hoffe das hilft dir :)

31
sourcerebels

Versuche dies:

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

Wenn Sie die Ergebnismenge nach oben zurücksetzen, erhalten Sie mit rs.absolute(1) keine erschöpften Ergebnismengen.

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

Sie können auch rs.first () anstelle von rs.absolute (1) verwenden.

2
zmorris

Wenn für eine bestimmte Bedingung keine Datensätze aus der Datenbank zurückgegeben werden und Wenn ich versucht habe, auf rs.getString (1) zuzugreifen; Ich habe diesen Fehler "erschöpfte Ergebnismenge" erhalten. 

Vor der Ausgabe war mein Code:

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

Nach dem Update:

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

Dies tritt normalerweise auf, wenn die stmt wiederverwendet wird, jedoch ein anderes ResultSet erwartet wird. Versuchen Sie, eine neue stmt und executeQuery zu erstellen. Es hat es für mich behoben!

1
Rohit

Diese Ausnahme tritt auf, wenn das ResultSet außerhalb der while-Schleife verwendet wird. Bitte behalten Sie alle mit dem ResultSet verbundenen Verarbeitungen in der While-Schleife.

1
Apurva

Problem hinter dem Fehler: Wenn Sie versuchen, auf die Oracle-Datenbank zuzugreifen, können Sie erst nach erfolgreichem Abschluss der Transaktion auf eingefügte Daten zugreifen. Zum Abschluss der Transaktion müssen Sie nach dem Einfügen der Daten in die Tabelle eine commit-Abfrage starten . Da sich die Oracle-Datenbank standardmäßig nicht im Auto-Commit-Modus befindet.

Lösung:  

Gehen Sie zu SQL PLUS und befolgen Sie die folgenden Abfragen.

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.
0
Iroti Mahajan

Sie erhalten diesen Fehler, weil Sie resultSet vor der Methode resultSet.next () verwenden.

Um die Zählung abzurufen, verwenden Sie einfach Folgendes:

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

Sie erhalten Ihr Ergebnis.

0
Prakhar Sharma

Stellen Sie sicher, dass res.getInt (1) nicht null ist.__ Wenn es null sein kann, verwenden Sie Integer count = null; und nicht int count = 0;

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