2012-02-22 62 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();