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
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 :)
Essaye ça:
if (rs != null && rs.first()) {
do {
count = rs.getInt(1);
} while (rs.next());
}
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.
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);
}
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!
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.
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.
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.
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);
)
)