jdbc转账事务案例 阿善没用

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