关于使用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()); // 打印当前,即最后一条记录的行号 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |