Question java.sql.SQLException: ensemble de résultats épuisé


Je reçois l'erreur java.sql.SQLException: ResultSet épuisé exécuter une requête sur une base de données Oracle. La connexion se fait via un pool de connexions défini dans Websphere. Le code exécuté est le suivant:

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

Je note que le jeu de résultats contient des données (rs.next ())

Merci


19
2017-08-17 11:42


origine


Réponses:


J'ai vu cette erreur en essayant d'accéder à une valeur de colonne après avoir traité le jeu de résultats.

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

J'espère que ceci vous aidera :)


30
2017-08-17 12:50



Essaye ça:

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

4
2017-08-17 11:50



Si vous réinitialisez le jeu de résultats en haut, en utilisant rs.absolute(1) vous n'obtiendrez pas de jeu de résultats épuisé.

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

Vous pouvez également utiliser rs.first () au lieu de rs.absolute (1), il en va de même.


2
2018-04-14 14:30



Lorsqu'il n'y a pas d'enregistrements renvoyés par la base de données pour une condition particulière et quand j'ai tenté d'accéder au fichier rs.getString (1); J'ai cette erreur "resultet épuisé".

Avant le problème, mon code était le suivant:

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

Après le correctif:

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

2
2018-03-24 17:56



Cela se produit généralement lorsque le fichier stmt est réutilisé mais que vous attendez un ResultSet différent, essayez de créer un nouveau fichier stmt et executeQuery. Ça a réglé ça pour moi!


1
2018-06-04 00:14



Cette exception se produit lorsque ResultSet est utilisé en dehors de la boucle while. Veuillez conserver tous les traitements liés au ResultSet dans la boucle While.


1
2017-08-22 16:24



Assurez-vous que res.getInt (1) n'est pas nul. Si cela peut être nul, utilisez Nombre entier = null; et pas int count = 0;

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

0
2018-05-28 08:32



Problème derrière l'erreur: Si vous essayez d'accéder à la base de données Oracle, vous ne pourrez pas accéder aux données insérées tant que la transaction n'a pas été réussie et pour terminer la transaction, vous devez déclencher une transaction. commit interroger après avoir inséré les données dans la table. Parce que la base de données Oracle n'est pas en mode de validation automatique par défaut.

Solution: 

Accédez à SQL PLUS et suivez les requêtes suivantes.

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
2017-11-28 10:05



Vous obtenez cette erreur car vous utilisez le resultSet avant la méthode resultSet.next ().

Pour obtenir le compte, utilisez simplement ceci:

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

Vous obtiendrez votre résultat.


0
2018-03-29 16:30