关于ResultSet.last()方法报错问题的解决
2015-12-14 10:56
246 查看
文章转载: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还是有要求的,如果要使用扩展式的游标,那么就要使用以下构造:
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进行修改如下:
这样一来问题就解决了。
在不想再次通过查询数据库得到记录条数的情况下,(如: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());// 打印当前,即最后一条记录的行号
这样一来问题就解决了。
相关文章推荐
- jdbc中的Statement和PreparedStatement接口对象
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- Oracle 手动创建数据库步骤详解