加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

关于使用ResultSet last报错的解决方法

发布时间:2020-12-12 14:34:49 所属栏目:MsSql教程 来源:网络整理
导读:通过以下操作,确实成功了。另外获取行数其实还有别的方法,不过我个人认为以下这个比较好用 由于楼主非要我分享,所以我也只好转载了。 在不想再次通过查询数据库得到记录条数的情况下,(如:select count(*) from tableName,如果你觉得对查询时间的优化

通过以下操作,确实成功了。另外获取行数其实还有别的方法,不过我个人认为以下这个比较好用

由于楼主非要我分享,所以我也只好转载了。


在不想再次通过查询数据库得到记录条数的情况下,(如:select count(*) from tableName,如果你觉得对查询时间的优化无所谓的话,那你就用吧!)我们首先想到的便是使用ResultSet.last()方法将游标指向结果集末尾,并使用ResultSet.getRow()方法获取当前行号来取得最大行号。

不过当我们使用代码时,相信大家都遇到过这样的问题:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last

它说JDBC不支持此方法,这是为~什么呢?(众网友开始吃香蕉,并准备把香蕉皮扔向楼主!)其实问题出在了Statement上面,因为Statement对象是专门处理ResultSet记录的API对象,所以它对于所要处理的ResultSet还是有要求的,如果要使用扩展式的游标,那么就要使用以下构造:

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

resultSetType(结果集类型)包括:

??? ResultSet.TYPE_FORWARD_ONLY 该常量指示光标只能向前移动的?ResultSet?对象的类型。

??? ResultSet.TYPE_SCROLL_INSENSITIVE 该常量指示可滚动但通常不受?ResultSet?底层数据更改影响

??? 的?ResultSet?对象的类型。

??? ResultSet.TYPE_SCROLL_SENSITIVE 该常量指示可滚动并且通常受?ResultSet?底层数据更改影响的

???ResultSet?对象的类型。

resultSetConcurrency(并发类型)包括:

??? ResultSet.CONCUR_READ_ONLY 该常量指示不可以更新的?ResultSet?对象的并发模式。

??? ResultSet.CONCUR_UPDATABLE 该常量指示可以更新的?ResultSet?对象的并发模式。

了解了以上的构造之后,我们便对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()); // 打印当前,即最后一条记录的行号

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读