关于ResultSet.last()方法报错问题的解决

文章转载:http://blog.sina.com.cn/s/blog_62a6001a0100ew6j.html


  在不想再次通过查询数据库得到记录条数的情况下,(如:select count(*) from tableName)我们可能会使用ResultSet.last()方法将游标指向结果集末尾,并使用ResultSet.getRow()方法获取当前行号来取得最大行号。
  但我们可能遇到这样的问题:
  java.sql.SQLException:
  [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last
  说JDBC不支持这种方法,这是因为Statement对象是专门处理ResultSet记录的API对象,所以它对于所要处理的ResultSet还是有要求的,如果要使用扩展式的游标,那么就要使用以下构造:

  Statement = Connection.createStatement(int resultSetType,int resultSetConcurrency)

  resultSetType(结果集类型)包括:
  该常量指示光标只能向前移动的 ResultSet 对象的类型。
  ResultSet.TYPE_FORWARD_ONLY
  该常量指示可滚动但通常不受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。
  ResultSet.TYPE_SCROLL_INSENSITIVE
  该常量指示可滚动并且通常受 ResultSet 底层数据更改影响的ResultSet 对象的类型。
  ResultSet.TYPE_SCROLL_SENSITIVE

  resultSetConcurrency(并发类型)包括:
  该常量指示不可以更新的 ResultSet 对象的并发模式。
  ResultSet.CONCUR_READ_ONLY
  该常量指示可以更新的 ResultSet 对象的并发模式。
  ResultSet.CONCUR_UPDATABLE

  了解了以上的构造之后,我们便对Statement进行修改如下:

  Connection conn = DBConn.getConnection();
  Statement stmt = conn.createStatement(
    ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
  String sql = "select * from table1";// 查询表table1中的内容
  ResultSet rs = stmt.executeQuery(sql);// 执行sql语句
  rs.last();// 定位光标到最后一条记录
  System.out.println(rs.getRow());// 打印当前,即最后一条记录的行号

  这样一来问题就解决了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值