了解事务

下载 JDBC 驱动程序

事务是组合到工作的逻辑单位的操作组。 它们用于控制和维护事务中的各项操作的一致性和完整性(尽管系统中可能发生错误)。

对于 Microsoft JDBC Driver for SQL Server,事务可以是本地的,也可以是分布式的。 事务还可以使用隔离级别。 有关 JDBC 驱动程序支持的隔离级别的详细信息,请参阅了解隔离级别

应用程序应使用 Transact-SQL 语句或 JDBC Driver 提供的方法来控制事务,但不可同时使用二者。 对同一事务既使用 Transact-SQL 语句又使用 JDBC API 方法可能会导致问题,例如无法在预期的时间提交事务,提交或回滚事务后又意外地开始了一个新的事务,或者出现“无法继续执行该事务”异常。

使用本地事务

当事务是单步提交事务时,该事务被视为本地的,并由数据库直接进行处理。 JDBC 驱动程序通过使用 SQLServerConnection 类的各种方法支持本地事务,这些方法包括 setAutoCommitcommitrollback。 本地事务通常由应用程序显式管理,或者由 Java Platform, Enterprise Edition (Java EE) 应用程序服务器自动管理。

以下示例执行 try 块中包含两个独立语句的本地事务。 这些语句将对 AdventureWorks2022 示例数据库中的 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 {
            System.out.println("Transaction failed.");
            con.rollback();
        }
        catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

使用分布式事务

分布式事务可在两个或多个联网的数据库上更新数据,同时保留事务处理的重要的原子性、一致性、独立性和稳定性 (ACID) 等属性。 JDBC 2.0 Optional API 规范中的 JDBC API 添加了分布式事务支持。 分布式事务的管理通常由 Java EE 应用程序服务器环境中的 Java Transaction Service (JTS) 事务管理器自动执行。 但是,Microsoft JDBC Driver for SQL Server 支持任意 Java Transaction API (JTA) 兼容的分布式事务管理器下的分布式事务。

JDBC 驱动程序与 Microsoft 分布式事务处理协调器 (MS DTC) 无缝集成,为 SQL Server 提供真正的分布式事务处理支持。 MS DTC 是 Microsoft 为 Microsoft Windows 系统提供的分布式事务处理工具。 MS DTC 使用 Microsoft 推出的久经考验的事务处理技术来支持 XA 功能,例如完整的两步分布式提交协议和分布式事务的恢复。

有关如何使用分布式事务的详细信息,请参阅了解 XA 事务

另请参阅

通过 JDBC 驱动程序执行事务