Подтвердить что ты не робот

Java.sql.SQLException: исчерпанный набор результатов

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

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

Попробуйте следующее:

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

Ответ 3

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

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

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

Ответ 4

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

Перед выпуском мой код:

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

Проблема, лежащая в основе ошибки:. Если вы пытаетесь получить доступ к базе данных 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.