繁体   English   中英

java.sql.SQLException:耗尽结果集

[英]java.sql.SQLException: Exhausted Resultset

我收到错误java.sql.SQLException:Exhausted ResultSet以对Oracle数据库运行查询。 通过Websphere中定义的连接池进行连接。 执行的代码如下:

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

我注意到结果集包含数据(rs.next())

谢谢

在处理结果集后尝试访问列值时,我已经看到此错误。

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

希望这个能对您有所帮助 :)

尝试这个:

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

如果将结果集重置为顶部,则使用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),该操作相同。

当数据库没有针对特定条件返回的记录时,以及当我尝试访问rs.getString(1)时; 我收到此错误“筋疲力尽的结果集”。

在发行之前,我的代码是:

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

修复后:

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

在while循环外使用ResultSet时,将发生此异常。 请将所有与ResultSet相关的处理保持在While循环内。

当重用stmt但期望使用不同的ResultSet时,通常会发生这种情况,请尝试创建新的stmt和executeQuery。 它为我解决了!

请确保res.getInt(1)不为null。 如果可以为null,则使用Integer count = null; 而不是int count = 0;

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

错误背后的问题:如果您尝试访问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.

之所以收到此错误,是因为您在resultSet.next()方法之前使用了resultSet。

要获得计数,只需使用以下命令:

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

您将得到结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM