web-dev-qa-db-fra.com

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

J'ai l'erreur Java.sql.SQLException: ResultSet épuisé pour 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 remarque que le jeu de résultats contient des données (rs.next ())

Merci

21
Mon

J'ai constaté 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 :)

31
sourcerebels

Essaye ça:

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

Si vous réinitialisez le jeu de résultats au maximum, utilisez rs.absolute(1) pour ne pas obtenir le 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
zmorris

Quand aucun enregistrement de base de données n'est renvoyé pour une condition particulière et quand j'ai tenté d'accéder à rs.getString (1); J'ai cette erreur "resultset épuisé". 

Avant le numéro, mon code était:

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

Après le correctif:

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

Cela se produit généralement lorsque l'objet stmt est réutilisé, mais dans l'attente d'un autre ResultSet, essayez de créer un nouvel élément stmt et executeQuery. Il l'a corrigé pour moi!

1
Rohit

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
Apurva

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'aura pas abouti. Pour terminer la transaction, vous devez lancer une requête commit 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:  

Allez dans 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
Iroti Mahajan

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

Pour obtenir le compte, utilisez ceci:

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

Vous obtiendrez votre résultat.

0
Prakhar Sharma

Assurez-vous que res.getInt (1) n'est pas null . S'il peut être null, utilisez Integer count = null; et pas int compte = 0;

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