案例:AA给BB转账1000元,如果转账过程中出现异常,会出现AA完成了转账,但是BB却没有受到钱,在此使用事务回滚机制
AA 2000
BB 2000
public class AccountDemo {
public static void main(String[] args) {
//1.获取数据库连接对象
Connection connection = JDBCUtils.getConnection();
PreparedStatement ps = null;
try {
connection.setAutoCommit(false);//事务 : 禁止自动提交
//2.sql语句
String sql = "update account set balance=? where name=?";
//3.预编译
ps = connection.prepareStatement(sql);
//AA账号的值
ps.setInt(1, 1000);
ps.setString(2, "a");
//执行sql
ps.executeUpdate();
System.out.println(1 / 0);//制造一个异常
//BB账号的值
ps.setInt(1, 3000);
ps.setString(2, "b");
//执行sql
ps.executeUpdate();
//如果没有发生问题
connection.commit();//事务 : 事务提交
} catch (Exception e) {
e.printStackTrace();//打印异常信息
//事务回滚
try {
connection.rollback();//事务 : 事务回滚
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
//允许自动提交
try {
connection.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
//关闭资源
JDBCUtils.close(connection, ps);
}
}
}

京公网安备 11010502036488号