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

错误代码如下:

产生原因:

异常出现于移动结果集的指针时,原因是在生成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 pstmt=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更新数据库

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/exception/sqlexception-baseresultset/

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">