`
sjsky
  • 浏览: 904679 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java.sql.SQLException: 对只转发结果集的无效操作

阅读更多

   blog迁移至 :http://www.micmiu.com

 

错误代码如下:

写道
java.sql.SQLException: 对只转发结果集的无效操作: previous
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.driver.BaseResultSet.previous(BaseResultSet.java:111)

产生原因:

 

异常出现于移动结果集的指针时,原因是在生成statement对象的时候提供的参数不同 无参数的那个方法使用的是默认参数,statement执行后得到的结果集类型为 ResultSet.TYPE_FORWARD_ONLY.这种类型的结果集只能通过rs.next();方法逐条读取,使用其他方法就会报异常.

 

解决办法:

 

需要在Statement或PrepareStatement 的实例化中加入参数使其可以回滚:

ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY

 

把:Statement stmt= conn.createStatement(); 修改为:
Statement stmt =conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

 

把:pstmt = sqlCon.prepareStatement(sql);  修改变为:

PrepareStatement p stmt =conn.prepareStatement (sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

 

参数说明:

  • ResultSet.TYPE_FORWARD_ONLY  :默认,这种类型的结果集只能通过rs.next()读取
  • ResultSet.TYPE_SCROLL_INSENSITIVE :双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
  • ResultSet.TYPE_SCROLL_SENSITIVE : 双向滚动,并及时跟踪数据库里的更新,以便更改ResultSet中的数据。
  • ResultSet.CONCUR_READ_ONLY :只读取ResultSet
  • ResultSet.CONCUR_UPDATABLE :用ResultSet更新数据库

 

 

转载请注明来自:Michael's blog @ http://sjsky.iteye.com

 

-----------------------------------分 ------------------------------------隔 ------------------------------------线 --------------------------------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics