JDBC事物控制
- 什么是事务:一个包含多个步骤或者业务操作。如果这个业务或者步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这个步骤是一个整体,不可分割的。
- 操作:
- 开启事务:mysql----->start transaction
- 提交事务:commit
- 回滚事务: rollback - 使用Connection 对象管理事物
- 开启事务: setAutoCommit(boolean autoCommit): 指定该方法里面传入false值,手动开启事务
在执行sql 语句之前开启的事务
- 提交事务:commit();---->当所有的sql语句执行完毕才提供事务
- 回滚事务:rollback;—>当事务中发生异常时回滚事务 回滚事务放在catch语句 - 示例:以银行转账为例:让张三给李四转账10000钱
public static void transform02(){
double money = 10000;
String username01 = "张三";
String username02 = "李四";
String sql01 = "update account set balance = balance-? where username = ?";
String sql02 = "update account set balance = balance+? where username = ?";
Connection con = DBUtil.getConnection();
try{
con.setAutoCommit(false);
ps01 = con.prepareStatement(sql01);
ps01.setDouble(1,money);
ps01.setString(2,username01);
int count = ps01.executeUpdate();
int i = 1 / 0;
ps02 = con.prepareStatement(sql02);
ps02.setDouble(1,money);
ps02.setString(2,username02);
int count02 = ps02.executeUpdate();
con.commit();
System.out.println("转账成功");
} cath (Exception e) {
try {
con.rollback();
System.out.println("转账失败");
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try{
ps02.close();
ps01.close();
con.close();
} catch (SQLEXception e) {
e.printStackTrace();
}
}
}