IDEA--JDBC操作事务

首先执行下列sql语句:

USE `jdbcstudy`;
-- 创建账户表
CREATE TABLE account(
`id` INT(10) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(40),
`money` FLOAT
);
-- 插入测试数据
INSERT INTO `account`(`name`,`money`) VALUES('A',1000);
INSERT INTO `account`(`name`,`money`) VALUES('B',1000);
INSERT INTO `account`(`name`,`money`) VALUES('C',1000);

在这里插入图片描述
示例;

package jdbc.lesson;

import jdbc.lesson.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCAffairs {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            connection = JdbcUtils.getConnection();
            // 关闭数据库的自动提交,会自动开启事务
            connection.setAutoCommit(false);// 开启事务
            String sql01 = "UPDATE account SET money = money-100 WHERE NAME = \"A\";";
            preparedStatement = connection.prepareStatement(sql01);
            preparedStatement.executeUpdate();
            String sql02 = "UPDATE account SET money = money+100 WHERE NAME = \"B\";";
            preparedStatement = connection.prepareStatement(sql02);
            preparedStatement.executeUpdate();
            // 业务完毕 执行事务
            connection.commit();
            connection.setAutoCommit(true);
            System.out.println("操作成功");

        } catch (SQLException e) {
            try {
                // 如果失败则回滚事务(如果不写,默认也会回滚)
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            JdbcUtils.release(connection, preparedStatement, null);
        }
    }
}

运行结果:
在这里插入图片描述

在这里插入图片描述

小结

  • 开启事务 connection.setAutoCommit(false);
  • 一组业务执行完毕,提交事务。
  • 可以在catch语句中显示的定义回滚语句,但默认失败就会回滚。

猜你喜欢

转载自blog.csdn.net/I_r_o_n_M_a_n/article/details/114378425