java.sql.SQLException: исчерпанный Resultset - PullRequest
21 голосов
/ 17 августа 2010

Я получаю сообщение об ошибке java.sql.SQLException: Exhausted ResultSet , чтобы выполнить запрос к базе данных Oracle.Соединение осуществляется через пул соединений, определенный в Websphere.Выполненный код выглядит следующим образом:

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

Я отмечаю, что набор результатов содержит данные (rs.next ())

Спасибо

Ответы [ 9 ]

31 голосов
/ 17 августа 2010

Я видел эту ошибку при попытке получить доступ к значению столбца после обработки набора результатов.

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

Надеюсь, это поможет вам:)

4 голосов
/ 17 августа 2010

Попробуйте это:

if (rs != null && rs.first()) {
    do {
        count = rs.getInt(1);
    } while (rs.next());
}
2 голосов
/ 22 августа 2016

Это исключение возникает, когда ResultSet используется вне цикла while. Пожалуйста, сохраняйте всю обработку, связанную с ResultSet, в цикле While.

2 голосов
/ 24 марта 2015

Когда нет записей, возвращаемых из базы данных для определенного условия, и когда я пытался получить доступ к rs.getString (1);Я получил эту ошибку "исчерпан набор результатов".

До выпуска мой код был:

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

После исправления:

while (rs.next()) {
    sNr = rs.getString(1);
}
2 голосов
/ 14 апреля 2014

Если вы сбросите набор результатов на самый верх, используя rs.absolute(1), вы не получите исчерпывающий набор результатов.

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

Вы также можете использовать rs.first () вместо rs.absolute (1), он делает то же самое.

1 голос
/ 04 июня 2013

Это обычно происходит, когда stmt используется повторно, ожидая другой ResultSet, попробуйте создать новый stmt и executeQuery.Это исправило это для меня!

0 голосов
/ 29 марта 2018

Вы получаете эту ошибку, потому что вы используете resultSet перед методом resultSet.next ().

Чтобы получить счет, просто используйте это:

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

Вы получите свой результат.

0 голосов
/ 28 ноября 2017

Проблема, стоящая за ошибкой: Если вы пытаетесь получить доступ к базе данных Oracle, вы не сможете получить доступ к вставленным данным до тех пор, пока транзакция не будет успешной, и для завершения транзакции вы должны запустить запрос commitпосле вставки данных в таблицу.Поскольку база данных Oracle по умолчанию не находится в режиме автоматической фиксации.

Решение:

Перейдите к SQL PLUS и выполните следующие запросы ..

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 голосов
/ 28 мая 2014

Пожалуйста, сделайте так, чтобы res.getInt (1) не был нулевым. Если оно может быть нулевым, используйте Integer count = null; , а не int count = 0;

Integer count = null;
    if (rs! = null) (
                    while (rs.next ()) (
                        count = rs.getInt (1);
                    )
                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...