JDBC 事务处理
事务由一组 SQL 语句组成。所谓事务处理,是指应用程序保证事务处理中的 SQL 语句要么全部都执行,要么一个都不执行。
事务处理是保证数据库中数据完整性与一致性的重要机制。
例如,银行的转账,需要两条 SQL 语句。
A 转账到 B 账户100元,就需要一条 SQL 语句对 A 的金额字段 -100元,另一条 SQL语句 对 B 的金额字段 +100元,如果 A 的 SQL 语句执行了,B 的没有执行,就破坏了数据的完整性和一致性。应用程序必须保证这两条要么全都执行,要么都不执行,这就是事务。
JDBC 的事务处理步骤:
- 用 setAutoCommit(booean b)方法关闭自动提交模式
- 用 commit()方法处理事务
- 用 rollback()方法处理事务失败
用setAutoCommit()关闭自动提交模式
所谓关闭自动提交模式,就是关闭SQL语句的即刻生效性(自动提交SQL)。和数据库建立一个连接对象后,例如 con,那么这个连接对象 con 的提交模式默认就是自动提交模式,为了能进行事务处理,必须调用 setAutoCommit() 方法关闭 con 的这个默认设置:
1 | con.setAutoCommit(false); |
先关闭完自动提交模式,再获取Statement 对象。
1 | sql = con.createStatement(); |
用commit()方法处理事务
con 调用 setAutoCommit(false) 后,con 所产生的Statement 对象对数据库提交任何一条 SQL 语句都不会立刻生效。这样,就有机会让 Statement 对象同时提交多条 SQL 语句,这些 SQL 语句就是一个事务。事务中的 SQL 语句不会立刻生效,直到连接对象 con 调用 commit()方法。
其作用是:将事务中的多条 SQL 语句同时提交,试图让事务中的 SQL 语句全部生效。
1 | con.commit(); |
用rollback()方法处理事务失败
所谓处理事务失败,就是撤销事务所做的操作。con 调用 commit() 方法进行事务处理时,只要事务中任何一个 SQL 语句未能成功生效,就抛出 SQLException 异常。在处理 SQLException 异常时,必须让 con 调用 rollback() 方法。
其作用是:撤销事务中成功执行的 SQL 语句对数据库数据所做的更新、插入或删除操作,将数据库中的数据恢复到 commit() 方法执行之前的状态。
1 | try{ |
实例
1 | import java.sql.*; |
阅读有风险,参考需谨慎,转载请注明出处。