快速业务通道

关于Java Database Connectivity您不知道的5件事:提升您和JDBC API的关系 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
teQuery("SELECT * FROM whatever"); if (wantsConnected)    JdbcRowSet rs = new JdbcRowSet(scrollingRS); // connected else    CachedRowSet crs = new CachedRowSet(scrollingRS); disconnected

JDBC 还附带了 5 个 Rowset 接口 “实现”(也就是扩展接口)。JdbcRowSet 是一个连接的 Rowset 实现;其余 4 个是断开的:

CachedRowSet 只是一个断开的 Rowset.

WebRowSet 是 CachedRowSet 的一个子集,知道如何将其结果转换成 XML,并再次转换回来。

JoinRowSet 是一个 WebRowSet,知道如何形成一个 SQL JOIN,而无需连接到数据库。

FilteredRowSet 是一个 WebRowSet,知道如何更进一步过滤传递回来的数据,而不需要连接到数据库。

Rowsets 是完整的 JavaBeans,意味着它们支持侦听类事件,因此,如果需要,也可以捕捉、检查并执行对 Rowset 的任何修改。事实上,如果 Rowset 有自己的 Username、Password、URL 和 DatasourceName 属性集(这意味着它将使用 DriverManager.getConnection() 创建一个连接)或者 Datasource 属性集(这很可能由 JNDI 获取),它甚至能管理对数据库的全部操作。然后,您可以在 Command 属性中指定要执行的 SQL,调用 execute(),然后处理结果 — 不需要更多的工作。

通常,Rowset 实现是由 JDBC 驱动程序提供的,因此实际的名称和/或包由您所使用的 JDBC 驱动程序决定。从 Java 5 开始 Rowset 实现已经是标准版本(standard distribution)的一部分了,因此您只需要创建一个 ...RowsetImpl(),然后让其运行。

5. 批量更新

尽管 Rowset 很实用,但有时候也不能满足您的需求,您可能需要返回来直接编写 SQL 语句。在这种情况下,特别是当您面对一大堆工作时,您就会很感激批量更新功能,可在一个网络往返行程中在数据库中执行多条 SQL 语句。

要确定 JDBC 驱动程序是否支持批量更新,快速调用 DatabaseMetaData.supportsBatchUpdates() 可产生一个明示支持与否的布尔值。在支持批量更新时(由一些非 SELECT 标示),所有任务逐个排队然后在某一瞬间同时得到更新,如清单 8 所示:

清单 8. 让数据库进行批量更新!

conn.setAutoCommit(false); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO lineitems VALUES(?,?,?,?)"); pstmt.setInt(1, 1); pstmt.setString(2, "52919-49278"); pstmt.setFloat(3, 49.99); pstmt.setBoolean(4, true); pstmt.addBatch(); // rinse, lather, repeat int[] updateCount = pstmt.executeBatch(); conn.commit(); conn.setAutoCommit(true);

默认必须调用 setAutoCommit(),驱动程序会试图交付提供给它的每条语句。除此之外,其余代码都是简单易懂的:使用 Statement 或 PreparedStatement 进行常见 SQL 操作,但是不调用 execute(),而调用 executeBatch(),排队等候调用而不是立即发送。

准备好各种语句之后,在数据库中使用 executeBatch() 触发所有的语句,这将返回一组整型值,每个值保存同样的结果,好像使用了 executeUpdate() 一样。

在批量处理的一条语句发生错误的情况下,如果驱动程序不支持批量更新,或者批处理中的一条语句返回 ResultSet,驱动程序将抛出一个 BatchUpdateException。有时候,在抛出一个异常之后,驱动程序可能试着继续执行语句。JDBC 规范不能授权某一行为,因此您应该事先试用驱动程序,这样就可以确切地知道它是如何工作的。(当然,您要执行单元测试,确保在错误成为问题之前发现它,对吧?)

结束语

作为 Java 开发的一个主题,JDBC API 是每个开发人员应该熟知的,就像您的左右手那样。有趣的是,在过去的几年中,许多

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