2012-02-22 77 views
0

我的代碼是:的SQLException:用盡結果集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

如果語句返回更新計數或語句的類型不返回ResultSet,則Statement.execute()的布爾結果爲false。 Javadoc的語言略有含糊。

相反的rset.first()你需要做的

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

rset.first()僅用於在ResultSet不是FORWARD_ONLY搬回到第一行的時候。

0

我覺得這個代碼是錯誤的以各種方式。我讀了JDBC tutorial並遵循你在其中找到的成語。

+0

好吧,我跟着同一個教程和我想要的例子是存在於這個鏈接http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html – invariant 2012-02-22 03:23:11

0

只是嘗試刪除rset.first();行....嘗試它可能工作..我從來沒有使用rset.first();