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

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

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


在不想再次通过查询数据库得到记录条数的情况下,(如: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()); // 打印当前,即最后一条记录的行号


猜你喜欢

转载自blog.csdn.net/Al_Ways/article/details/7686346