快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
的联合方式就是内连接,但是在没有显示的调用 setJoinType() 之前调用 getJoinType() 会抛出 ArrayIndexOutOfBoundsException 的异常。 所以一般来讲,我们可以不需要调用这几个方法而直接认为 JoinRowSet 默认并且只允许的联合方式就是内连接(INNER JOIN)。

如何联合各种 RowSet

联合多个 RowSet 的方法其实就是往一个 JoinRowSet 里调用 add 方法添加其他 RowSet(这个 RowSet 可以是上面提到的五种 RowSet 中的任意一种,包括离线操作的 JdbcRowSet 和 JoinRowSet 本身)的过程。添加一个 RowSet 的同时也必须制定联合时匹配的列。JoinRowSet 接口中提供了以下几个 add 方法:

addRowSet(Joinable rowset)

addRowSet(RowSet[] rowset, int[] columnIdx)

addRowSet(RowSet[] rowset, String[] columnName)

addRowSet(RowSet rowset, int columnIdx)

addRowSet(RowSet rowset, String columnName)

下面是一个联合一个 JdbcRowSet 和一个 CachedRowSet 的简单例子。

清单 25. 使用 JoinRowSet

// 构造一个CachedRowSet并且填充CUSTOMERS表中的数据。 CachedRowSet cachedRS = new CachedRowSetImpl(); cachedRS.setUrl(DBCreator.DERBY_URL); cachedRS.setCommand(DBCreator.SQL_SELECT_CUSTOMERS); cachedRS.execute(); // 构造一个JdbcRowSet并且填充ORDERS表中的数据。 JdbcRowSet jdbcRS = new JdbcRowSetImpl(); jdbcRS.setUrl(DBCreator.DERBY_URL); jdbcRS.setCommand(DBCreator.SQL_SELECT_ORDERS); jdbcRS.execute(); // 把cachedRS添加进新构造的JoinRowSet中。 JoinRowSet joinRS = new JoinRowSetImpl(); joinRS.addRowSet(cachedRS, "ID"); //$NON-NLS-1$ // 下面这条被注释的语句会抛出ClassCastExcepion。 // joinRS.addRowSet(jdbcRS, "ID"); // 把jdbcRS添加进这个JoinRowSet中。 jdbcRS.setMatchColumn("ID"); //$NON-NLS-1$ joinRS.addRowSet(jdbcRS); // 观察结果 printRowSet(joinRS);

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

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

清单 26. 清单 25 中的代码执行结果

The data in CachedRowSet: 2 Jim null 1 Compute 1 Tom Tom is VIP. 1 Book

虽然 JoinRowSet 提供了五个不同的 addRowSet 方法,但是对于某些 RowSet,并不是每个方法都能用的。比如当上面添加一个 JdbcRowSet 的时候,你只能调用 addRowSet(Joinable) 这个方法(JdbcRowSet 实现了 Joinable 接口),并且在调用这个方法之前一定要先设置配对的列名或者以 1 为基数的配对列的位置,如下所示。

清单 27. 添加 JdbcRowSet

// 正确的添加一个JdbcRowSet的方法。 jdbcRS.setMatchColumn("ID"); //$NON-NLS-1$ joinRS.addRowSet(jdbcRS);

输出结果表明此时 JoinRowSet 中的数据正是两个 RowSet 中的数据的内联结果。加进去的两个 RowSet 中的”ID”这一列,在 JoinRowSet 中合并成了一列。如果我们查看最后 JoinRowSet 的列名,会发现这一列的列名变成了”MergedCol”, 其它列名不变。这个时候的 JoinRowSet 可以继续添加其他的 RowSet,联合会在 MergedCol 这一列上进行。

清单 28. 查看 JoinRowSet 中列名

for (int i = 1; i <= joinRS.getMetaData().getColumnCount(); i++) {      System.out.println(joinRS.getMetaData().getColumnName(i)); }

清单29. 清单 28 中的代码执行结果

MergedCol NAME REMARK USER_ID PRODUCT

JoinRowSet 作为 CachedRowSet 的使用

从前面的继承结构图可以看到,JoinRowSet 继续于 CachedRowSet。因此从理论上来看,JoinRowSet 也可以作为 CachedRowSet 来使用。但是其实 JoinRowSet 很多方法并不是

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号