2012-02-22 12 views
0

私のコードは次のとおりです。のSQLException:疲れたResultSet oracle11g

 Statement testSt = null; 
     ResultSet rset = null; 
     String query = "select jid FROM playjdbc WHERE jid=56"; 
     try { 
      testSt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
        ResultSet.CONCUR_UPDATABLE); 

      if (!testSt.execute(query)) { 
       System.out.println("jid doesnt exist!"); 
      } else { 

       rset = testSt.getResultSet(); 
       rset.first(); 
       int jidValue = rset.getInt(1); // exception cause 
       System.out.println("jid is = " + jidValue); 

      } 

     } 

rset.getInt(1)ラインは、この例外を発生させたが、私は私のデータベースで同じクエリを実行したとき それはデータを返しました。

スタックトレース:

java.sql.SQLException: Exhausted Resultset 
    at oracle.jdbc.driver.ScrollableResultSet.getOracleObject(ScrollableResultSet.java:623) 
    at oracle.jdbc.driver.ScrollableResultSet.getInt(ScrollableResultSet.java:776) 
    at oracle.jdbc.driver.UpdatableResultSet.getInt(UpdatableResultSet.java:666) 

答えて

2

Statement.execute()のブール結果は、文が更新カウントを返すか、または文がResultSetを返さない型の場合はfalseです。 Javadocは、その言語ではあまりあいまいです。あなたは

if (rset.next()) 
{ 
    int jidValue = rset.getInt(1); // exception cause 
    System.out.println("jid is = " + jidValue); 
} 

rset.first()を行う必要があり

代わりのrset.first()FORWARD_ONLYないのResultSetの最初の行に戻って移動する場合にのみ使用されます。

0

私は、このコードはあらゆる方法で間違っていると思います。私はJDBC tutorialを読んで、あなたがそれで見つけたイディオムに従います。

+0

私は同じチュートリアルに従っていますが、試してみるとこのリンクにありますhttp://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html – invariant

0

ちょうどrset.first();行を削除してみてください。それがうまくいくか試してみてください。rset.first();

関連する問題