1.事物概念
在某些业务中要求连续的两个或多个操作执行要么同时成功要么同时失败.
2.事物的特点
原子性 隔离性 一致性 持久性
3.事物特性
原子性 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
一致性 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
隔离性 一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性 也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
4.JDBC事物处理
Connection对象默认为「自动提交」的事务模式(autocommit)。 可以操作Connection的setAutoCommit(false)方法改变自动提交的为手动提交。 在下达一连串的SQL语句后,自行调用Connection的commit()来完成变更。 如果执行失败用 rollback()来撤消操作。
示例:
try {
…
conn.setAutoCommit(false); //设定autocommit为false
stmt = conn.createStatement();
stmt.execute("...."); // SQL
stmt.execute("....");
stmt.execute("....");
conn.commit(); //正确无误,确定提交
}catch(SQLException e) { //在commit()前发生错误
try {
conn.rollback(); //撤消操作
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
设定储存点(savepoint)
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.executeUpdate("....");
stmt.executeUpdate("....");
Savepoint savepoint = conn.setSavepoint(); //设定savepoint
stmt.executeUpdate("....");
//如果因故rollback
conn.rollback(savepoint);
. . .
conn.commit();
//记得释放savepoint
conn.releaseSavepoint(savepoint);