MySQL学习笔记(6)-- JDBC 的事务操作

之前我们是使用MySQL的命令来操作事务。接下来我们使用JDBC来操作银行转账的事务。
MySQL 学习笔记(1)

JDBC 的事务操作 :

请问 : JDBC 中, 事务交给了哪个对象 ???

回答 : Connection 对象来操作.

1. conn.setAutoCommit(false);       设置不要自动提交. (开启事务)
2. conn.commit();                  提交事务. (try 语句的最后一步执行)
3. conn.rollback();                回滚事务. (catch 块中, 一旦发生异常, 以前的操作全部取消)

代码实现方法

public class TransactionTest1 {
    public static void main(String[] args) {
        // 1. 模拟数据
        String outUser = "Jack";
        String inUser = "Rose";
        int money = 1000;

        Connection conn = null;
        PreparedStatement stmt = null;

        try {
            // 2. 建立连接
            conn = JDBCUtils.getConnection();

            // 第一步 : 开启事务
            conn.setAutoCommit(false);

            // 3. 操作数据
            // 3.1 转出
            String sql1 = "update account set money = money - ? where name = ?;";
            // 预编译
            stmt = conn.prepareStatement(sql1);
            // 设置参数
            stmt.setInt(1, money);
            stmt.setString(2, outUser);
            // 执行
            int count = stmt.executeUpdate();
            System.out.println("count = " + count);

            // int num = 10 / 0;  // Arithmetic Exception 算术异常

            // 3.2 转入
            String sql2 = "update account set money = money + ? where name = ?;";
            // 预编译
            stmt = conn.prepareStatement(sql2);
            // 设置参数
            stmt.setInt(1, money);
            stmt.setString(2, inUser);
            // 执行
            count = stmt.executeUpdate();
            System.out.println("count = " + count);

            // 第二步 : 提交事务
            conn.commit();

            System.out.println("转账成功!");

        } catch (Exception e) {
            e.printStackTrace();

            // 第三步 : 回滚事务
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }

            System.out.println("转账失败!");
        } finally {
            // 4. 释放资源
            JDBCUtils.release(conn, stmt);
        }
    }
}

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zyrdfly/article/details/82708708