快速业务通道

Java 6 RowSet使用完全剖析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
怎样的情况发生。

ResultSet rs 必须在遍历完毕后才能关闭,否则翻页遍历时会抛 SQLException。

我们注意到在使用分页遍历数据集时,nextPage() 是最先被调用的,也就是说页与行相似,最开始的页游标是指向第 0 页的,通过 nextPage() 方法移到第一页,这样就可以用非常简洁的代码遍历数据集。那么如果在第 0 页时(第一次调用 nextPage)之前使用 next 遍历当前页会是怎样的结果呢?

清单 12. 分页代码二

ResultSet rs = stmt.executeQuery(DBCreator.SQL_SELECT_ORDERS); CachedRowSet cachedRS = new CachedRowSetImpl(); // 设置页大小 cachedRS.setPageSize(4); cachedRS.populate(rs, 1); printRowSet(cachedRS); while (cachedRS.nextPage()) {   printRowSet(cachedRS); }

我们看到第一页被输出了两次。也就是说使用 next 始终是可以遍历第一页的,而每次 nextPage 后,行游标都会被重置到当前页的第一行数据之前。对于使用 execute 填充数据的方式,通过 setPageSize 同样可以实现分页。

setMaxRows 可以设置 CachedRowSet 可遍历的最大行数。下面是 setMaxRows 和 setPageSize 同时使用的例子。

清单 13. 分页代码三

ResultSet rs = stmt.executeQuery(DBCreator.SQL_SELECT_ORDERS); CachedRowSet cachedRS = new CachedRowSetImpl(); cachedRS.setPageSize(4); cachedRS.setMaxRows(7); cachedRS.populate(rs, 1); while (cachedRS.nextPage()) {   printRowSet(cachedRS); } rs.close();

Java 6 RowSet使用完全剖析(7)

时间:2011-02-15 IBM 徐睿智 刘威

上面的例子中,分别将页大小设置为 4,最大行数设置为 7(设置页大小时,如果最大行数不等于 0,就必须小于等于最大行数),然后遍历打印所有行,输出如下。

清单 14. 清单 13 中的代码执行结果

The data in RowSet: 1 1 Book 2 1 Compute 3 2 Phone 4 2 Java The data in RowSet: 5 2 Test 6 1 C++ 7 2 Perl

我们注意到,虽然满足 Select 条件的数据有 10 条,但由于我们使用 setMaxRows 设置了允许的最大行数,所以最终我们只得到了 7 条数据。另外 setPageSize 只会改变下一次填充页时的大小,无法影响当前页的大小。我们可以在数据填充完毕后再改变页的大小。

清单 15. 分页代码四

ResultSet rs = stmt.executeQuery(DBCreator.SQL_SELECT_ORDERS); CachedRowSet cachedRS = new CachedRowSetImpl(); cachedRS.setPageSize(4); cachedRS.populate(rs, 1); cachedRS.setPageSize(3); while (cachedRS.nextPage()) {   printRowSet(cachedRS); } rs.close();

我们在 populate 数据之前设置的页大小是 4,在 populate 数据之后又将页大小设置为 3,然后遍历输出结果。

清单 16. 清单 15 中的代码执行结果

The data in RowSet: 1 1 Book 2 1 Compute 3 2 Phone 4 2 Java The data in RowSet: 5 2 Test 6 1 C++ 7 2 Perl The data in RowSet: 8 1 Ruby 9 1 Erlang 10 2 Python

我们发现除了第一页有 4 条数据外,其余页都只有 3 条数据。实际上 populate 中就已经对第一页数据进行了填充,并且使用之前设置的 4 作为页大小。所以 populate 之后设置的页大小就只能从第二页开始起作用了。setMaxSize 与此相似,也是在每次填充页时计算。

Java 6 RowSet使用完全剖析(8)

时间:2011-02-15 IBM 徐睿智 刘威

应注意的问题

在 JDK 5.0 中,当删除一行中某列值为 null 时,会抛出 NullPointerException。例如,表 CUSTOMERS 中第二行第三列的值为 null。假设 cachedRS 里面填充着表 CUSTOMERS 的数据,那么下段代码在 JDK 5.0 下运行时会抛出 NullPointerException。在 JDK 6.0 中,此问题已得到修正。

清单 17.

cachedRS.absolute

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号