事务是组合到工作的逻辑单位的操作组。它们用于控制和维护事务中的各项操作的一致性和完整性(尽管系统中可能发生错误)。
对于 Microsoft SQL Server 2005 JDBC Driver,事务可以是本地的,也可以是分布式的。事务还可以使用隔离级别。有关 JDBC 驱动程序支持的隔离级别的详细信息,请参阅了解隔离级别。
使用本地事务
当事务是单步提交事务时,该事务被视为本地的,并由数据库直接进行处理。JDBC 驱动程序通过使用 SQLServerConnection 类的各种方法支持本地事务,这些方法包括 setAutoCommit、commit 和 rollback。通常由此应用程序显式地管理本地事务,或由 J2EE 应用程序服务器自动管理。
以下实例执行 try 块中包含的两个独立语句的本地事务。这些语句将对 AdventureWorks SQL Server 2005 示例数据库中的 Production.ScrapReason 表运行,并且如果没有引发异常,则将其提交。如果引发异常,catch 块中的代码将回滚此事务。
public static void executeTransaction(Connection con) {
try {
//Switch to manual transaction mode by setting
//autocommit to false. Note that this starts the first
//manual transaction.
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong size')");
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong color')");
con.commit(); //This commits the transaction and starts a new one.
stmt.close(); //This turns off the transaction.
System.out.println("Transaction succeeded. Both records were written to the database.");
}
catch (SQLException ex) {
ex.printStackTrace();
try {
con.rollback();
System.out.println("Transaction failed. No records were written to the database.");
}
catch (SQLException se) {
se.printStackTrace();
}
}
}
使用分布式事务
分布式事务可在两个或多个联网的数据库上更新数据,同时保留事务处理的重要的原子性、一致性、独立性和稳定性 (ACID) 等属性。JDBC 2.0 Optional API 规范中的 JDBC API 添加了分布式事务支持。分布式事务的管理通常由 J2EE 应用程序服务器环境中的 Java Transaction Service (JTS) 事务管理器自动执行。但是,Microsoft SQL Server 2005 JDBC Driver 支持任意 Java Transaction API (JTA) 兼容的分布式事务管理器下的分布式事务。
JDBC 驱动程序与 Microsoft 分布式事务处理协调器 (Distributed Transaction Coordinator, MS DTC) 无缝集成,通过 SQL Server 2000 和 SQL Server 2005 提供真正的分布式事务支持。MS DTC 是 Microsoft 为 Microsoft Windows 系统提供的分布式事务处理工具。MS DTC 使用 Microsoft 推出的久经考验的事务处理技术来支持 XA 功能,例如完整的两步分布式提交协议和分布式事务的恢复。
有关如何使用分布式事务的详细信息,请参阅了解 XA 事务。