package com.itheima.demo01_jdbc_transaction;
import com.itheima.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/*
    案例: 演示JDBC的事务操作之 模拟转账
    版本2: 模拟转账, 通过事务实现.   掌握
 */
public class Demo02 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stat = null;
        try {
            //1. 获取连接对象.
            conn = JDBCUtils.getConnection();
            //2. 获取可以执行SQL语句的对象.
            stat = conn.createStatement();
            //3. 执行SQL语句, 获取结果集.
            String sql1 = "UPDATE account SET money = money - 1000 WHERE aid = 1;";
            String sql2 = "UPDATE account SET money = money + 1000 WHERE aid = 2;";
            //开启事务.
            //关闭事务的自动提交功能 =  开启了我们自己的事务.
            conn.setAutoCommit(false);
            int num1 = stat.executeUpdate(sql1);        //扣钱
            //System.out.println(1 / 0);
            int num2 = stat.executeUpdate(sql2);        //加钱
            //4. 操作结果集.
            if (num1 == 1 && num2 == 1) {
                //提交事务
                conn.commit();
                System.out.println("转账成功!");
            }
        } catch (Exception e) {
            //e.printStackTrace();
            //事务回滚
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            System.out.println("转账失败");
        } finally {
            //5. 释放资源.
            JDBCUtils.release(conn, stat, null);
        }
    }
}
原文:https://www.cnblogs.com/shan13936/p/13904434.html