事务的特性:
- 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。
- 一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
- 隔离性(isolation):一个事务的执行不能被其他事务所影响。
- 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改。
事务(Transaction)的四个属性(ACID)的另一种解释:
原子性(Atomic) 对数据的修改要么全部执行,要么全部不执行。
一致性(Consistent) 在事务执行前后,数据状态保持一致性。
隔离性(Isolated) 一个事务的处理不能影响另一个事务的处理。
持续性(Durable) 事务处理结束,其效果在数据库中持久化。
实例1:
private Connection conn = null;
private PreparedStatement ps = null;
try {
conn.setAutoCommit(false); //将自动提交设置为false
ps.executeUpdate("修改SQL1");//执行修改操作
ps.executeUpdate("修改SQL2"); //执行修改操作
ps.executeQuery("查询SQL"); //执行查询操作
conn.commit(); //当两个操作成功后手动提交
} catch (Exception e) {
conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
e.printStackTrace();
}
实例2:
PreparedStatement ps = null;
Connection conn=null;
Savepoint sp=null;
try {
conn=dbUtil.getCon();
conn.setAutoCommit(false);//取消自动提交
ps=conn.PreparedStatement(sql语句);
ps.executeUpdate("修改SQL1");//执行修改操作
sp=conn.setSavepoint();//这是一个保存点
ps.executeUpdate("修改SQL2"); //执行修改操作
} catch (Exception e) {
try {
conn.rollback(sp);//事务回滚sp保存点,保存点下部分有报错则全部不执行,只执行上半部。
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
try {
conn.commit();//提交事务
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}