打造更强的Java支持
2010-05-14 15:00:40 来源:WEB开发网JDBC 3.0
DB2 UDB v.8.2 引入了对 JDBC 3.0 规范的支持,包括新的结果集保持能力(holdability)和保存点。
可更新的结果集。Java 开发人员更喜欢从 Java API 的角度来思考,而不是从 SQL 的角度去思考。在 JDBC 1.0 中,表示查询结果的结果集有一个并发类型 CONCUR_READ_ONLY,这意味着结果集不能更新。而在 JDBC 2.0 中具有并发类型 CONCUR_UPDATABLE,这意味着可以使用 Java 代码、而不是 SQL 来更新结果集。通过 ResultSet 接口的各种 updateXX() 方法可以很方便地更新结果集,这些方法可以更新结果集的内容。程序员可以使用结果集中要更新的列的列索引,或者使用一个表示要更新的列的名称的字符串。
下面是 updateInt 方法的两种形式:
updateInt(String columnName, int newIntValue)
updateInt(int columnIndex, int newIntValue)
调用 updateXX 方法更改结果集之后,必须对 ResultSet 对象调用 updateRow 方法,以告知刚才的更新。清单 5 阐释了可更新结果集的概念。更早的 DB2 附带的 JDBC 驱动程序(即应用程序驱动程序 — Type 2 — 或网络驱动程序 — Type 3)要求显式地通过游标来使用结果集更新数据。清单 5 展示了更常见的(也是我们推荐的)用法。
清单 5. 可更新结果集
String sqlQuery = "select firstName, middleInitial, lastName, from applicants"; ResultSet resultSet = stmt.executeQuery(sqlQuery); while (resultSet.next()) { // update the middleInitial column of the applicants table with an "S" resultSet.updateStringt(2, "S."); // persist the changes of the result set to the database. resultSet.updateRow(); }
事务保存点(transaction savepoint)。事务保存点使开发人员可以将更新成组地应用于数据库。这彻底改变了早期 JDBC 规范中的 all-or-nothing(要么全做,要么全不做)方法。事务保存点表示应用程序中的一些标记,必要时您可以根据应用程序逻辑回滚到事务保存点。
要使用这种功能,必须将 Connection 对象的 auto-commit 模式设置为 OFF,这可以通过使用 setAutoCommit 方法,以 false 为参数来完成。定义保存点和回滚在代码中都不难实现。在清单 6 中,我们将 Connection 对象自治的 AutoCommit 值设置为 false,然后执行两次更新。接着,我们定义一个名为 SavePoint1 的保存点,再执行两次更新。当执行接下来的一行 — db2Connection.rollBack(savePoint) — 时,便回滚到前两次更新后的状态。
清单 6. 使用事务保存点来回滚更改
// set auto-commit mode to off
db2Connection.setAutoCommit(false);
Statement statement = db2Connection.createStatement();
statement.executeUpdate(firstUpdateStringStatement);
statement.executeUdpate(secondUpdateStringStatemet);
// define a Savepoint marker
Savepoint savePoint = db2Connection.setSavePoint("SavePoint1");
statement.executeUpdate(thirdUpdateStringStatement);
statement.executeUpdate(fourthUpdateStringStatement();
// roll back to the savepoint
db2Connection.rollBack(savePoint);
// commit the changes
db2Connection.commit();
当您想不遵从更改时,这种方式的回滚比较有用。回滚可以结合 Boolean 逻辑,这样一来便可以设计复杂的业务事务。
游标保持能力。在 JDBC 3.0 之前,当提交事务时,在事务期间创建的任何 ResultSet 对象的游标都将被自动关闭。而对于 JDBC 3.0,您可以撤消这种效果,方法是将 ResultSet.HOLD_CURSORS_OVER_COMMIT 常量提供给 Connection 对象的 createStatement 或 prepareStatement 方法。因此,您可以对结果集中的一组记录执行一组更新操作,然后将更改提交给 DB2 UDB 服务器。这样可以将记录上的 DB2 服务器锁释放出来,而使其他应用程序得以看见更改过的数据,并允许应用程序继续处理 ResultSet。
更多内容
DB2 Universal JDBC Driver 是 DB2 家族中的战略组成部分,我们只是略微谈到 DB2 UDB v.8.2 中的一些 JDBC 增强。在 DB2 UDB 中还可以发现很多的代码示例,包括完整的 JDBC 驱动程序文档细节(在“Application Development Guide: Programming Client Applications”中)。新的基于 Eclipse 技术的 DB2 UDB v.8.2 Information Center 为对 DB2 开发人员和 DB2 管理员有用的信息提供了极好的搜索功能。
更多精彩
赞助商链接