JDBC事物处理
转账,中间出现了异常,转钱的那个人账户钱少了,但是收到人的钱没有增加,
这种情况就是没有进行事物处理的状态,所以开启事物就可以解决问题了
1.con.setAutoCommit(false); 设置自动提交的关闭
自动提交关闭就是开启提交事物了
2.con.commit():提交事物 -> 在更新的后面
3.在catch里面放入con.rollback()进行回滚事物,加了事物之后出现异常时就会进行回滚。
代码实现:
@Test
public void test() {
Connection con = null;
try {
con = JDBCUtilsDruid2.getConn();
// 解决办法,开启事物
con.setAutoCommit(false);
String sql = "UPDATE emps SET salary=salary-500 WHERE id = 1";
PreparedStatement ps = con.prepareStatement(sql);
ps.executeUpdate();
//System.out.println(1/0); //在中间加入一个异常
PreparedStatement ps2 = con.prepareStatement(sql);
String sql2 = "UPDATE emps SET salary=salary+500 WHERE id = 2";
ps2.executeUpdate(sql2);
con.commit(); // 提交事物
} catch (Exception e) {
e.printStackTrace();
try {
con.rollback(); // 回滚事物
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}