ACID [Atomicity, Consistency, Isolation, Durability]
ACID [Atomicity, Consistency, Isolation, Durability] 原子性、一致性、隔离性、持久性package further.zwf.acid; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; /** * MySQL 事务示例银行转账原子性、一致性保证 * * author ZengWenFeng * date 2022.12.07 * mobile 13805029595 * email 117791303QQ.COM */ public class MysqlTransactionDemo { // 数据库配置改成你自己的 private static final String URL jdbc:mysql://localhost:3306/testdb?useSSLfalseserverTimezoneUTC; private static final String USER root; private static final String PASSWORD 123456; public static void main(String[] args) { transfer(1001, 1002, 100.0); // 1001 给 1002 转 100 元 } /** * 转账方法核心事务代码 * param fromId 转出账户ID * param toId 转入账户ID * param money 转账金额 */ public static void transfer(int fromId, int toId, double money) { Connection conn null; PreparedStatement deductStmt null; PreparedStatement addStmt null; try { // 1. 获取数据库连接 conn DriverManager.getConnection(URL, USER, PASSWORD); // 事务核心关闭自动提交 conn.setAutoCommit(false); // 2. 扣钱转出账户 -money String deductSql UPDATE account SET balance balance - ? WHERE id ?; deductStmt conn.prepareStatement(deductSql); deductStmt.setDouble(1, money); deductStmt.setInt(2, fromId); deductStmt.executeUpdate(); // 模拟异常打开测试回滚 // int error 1 / 0; // 3. 加钱转入账户 money String addSql UPDATE account SET balance balance ? WHERE id ?; addStmt conn.prepareStatement(addSql); addStmt.setDouble(1, money); addStmt.setInt(2, toId); addStmt.executeUpdate(); // 全部成功提交事务 conn.commit(); System.out.println(转账成功事务已提交); } catch (Exception e) { // 出现异常回滚事务 try { if (conn ! null) { conn.rollback(); System.out.println(转账失败事务已回滚); } } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { // 关闭资源 try { if (deductStmt ! null) deductStmt.close(); if (addStmt ! null) addStmt.close(); if (conn ! null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

相关新闻

最新新闻

日新闻

周新闻

月新闻