web-dev-qa-db-ja.com

java.sql.SQLException:使い果たされた結果セット

エラーが発生しますJava.sql.SQLException:Exhausted ResultSet Oracleデータベースに対してクエリを実行します。接続は、Websphereで定義された接続プールを介して行われます。実行されるコードは次のとおりです。

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

結果セットにデータが含まれていることに注意してください(rs.next())

ありがとう

21
Montse Garcia

結果セットの処理後に列の値にアクセスしようとしたときに、このエラーが発生しました。

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

これがあなたを助けることを願っています:)

31
sourcerebels

これを試して:

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

結果セットを一番上にリセットすると、rs.absolute(1)を使用して、結果セットが使い果たされなくなります。

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

Rs.absolute(1)の代わりにrs.first()を使用することもできます。同じことを行います。

2
zmorris

この例外は、ResultSetがwhileループの外側で使用される場合に発生します。 ResultSetに関連するすべての処理をWhileループ内に保持してください。

2
Apurva

特定の条件に対してデータベースからレコードが返されない場合、およびrs.getString(1)にアクセスしようとした場合。このエラーは「結果セットを使い果たしました」です。

問題の前、私のコードは:

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

修正後:

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

これは通常、stmtが再利用されているが別のResultSetを期待している場合に発生し、新しいstmtを作成してexecuteQueryを試行します。それは私のためにそれを修正しました!

1
Rohit

エラーの背後にある問題: 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
Iroti Mahajan

ResultSet.next()メソッドの前にresultSetを使用しているため、このエラーが発生しています。

カウントを取得するには、これを使用します:

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

結果が得られます。

0
Prakhar Sharma

Res.getInt(1)がnullでないことを確認してください。 nullになる可能性がある場合は、int count = 0ではなくInteger count = null;を使用します。

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