首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-10-29 
关于ResultSet.last()方法报错问题的解决今天看到这样的一个文章,感觉写的挺好,就把它拿过来收藏一下,也与

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

今天看到这样的一个文章,感觉写的挺好,就把它拿过来收藏一下,也与大家分享一下。有位朋友在使用ResultSet.last时,遇到了这样的问题java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: 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对象是专门处理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());?????????????? // 打印当前,即最后一条记录的行号

?

?

ps:这种方法是要装载数据的,所以数据量一旦过大就是会超出内存设置的。

热点排行