Java Mysql 简明教程

Java & MySQL - Transactions

如果您的 JDBC 连接处于自动提交模式(默认如此),那么在每个 SQL 语句完成后,它都会提交到数据库。

对于简单的应用程序,这可能很好,但有三个原因会导致你想关闭自动提交并管理自己的事务:

  1. To increase performance.

  2. 维护业务流程的完整性。

  3. To use distributed transactions.

事务使你能够控制数据库应用更改的时间和方式。它将单独的 SQL 语句或一组 SQL 语句视为一个逻辑单元,如果其中一条语句引发故障,则整个事务就会失败。

要启用手动事务支持而非 JDBC 驱动程序默认使用的自动提交模式,请使用 Connection 对象的 setAutoCommit() 方法。若要 setAutoCommit( ) 传递布尔值 false,则可以关闭自动提交。你可以传递布尔值 true 来重新打开它。

例如,如果你有一个名为 conn 的 Connection 对象,则编写以下代码来关闭自动提交:

conn.setAutoCommit(false);

Commit & Rollback

一旦完成更改,并且你希望提交更改,请按照如下方式调用连接对象的 commit() 方法:

conn.commit( );

否则,若要回滚对使用 conn 命名的 Connection 对数据库作出的更新,则使用以下代码:

conn.rollback( );

Using Savepoints

新的 JDBC 3.0 Savepoint 接口为你提供了额外的交易控制。

当你设置保存点时,你要在事务中定义一个逻辑回滚点。如果在保存点之后发生错误,则可以使用回滚方法来撤消所有更改或仅撤消保存点之后作出的更改。

Connection 对象有两个可帮助你管理保存点的新方法:

  1. setSavepoint(String savepointName) - 定义新的保存点。它还返回一个 Savepoint 对象。

  2. releaseSavepoint(Savepoint savepointName) - 删除一个保存点。注意,它需要一个 Savepoint 对象作为参数。这个对象通常是 setSavepoint() 方法生成的一个保存点。

有一个 rollback (String savepointName) 方法,它将工作回滚到指定的保存点。