案例: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); } } }