JDBC控制事务

简述

  事务就是一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败。

  操作:开启事务、提交事务、回滚事务。

Connection对象管理事务

  JDBC默认事务是自动提交的,我们需要使用connection对象的setAutoCommit(boolean )方法设置为false,即开启事务。使用commit方法来提交事务,使用rollback来回滚事务。

银行转账案例

package hjj.transaction;

import hjj.util.JDBCUtils;

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

public class Main {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;

        try {
            connection = JDBCUtils.getConnection();
            //开启事务
            connection.setAutoCommit(false);
            String sql1 = "update account set balance = balance - ? where id = ?";
            String sql2 = "update account set balance = balance + ? where id = ?";
            pstmt1 = connection.prepareStatement(sql1);
            pstmt2 = connection.prepareStatement(sql2);
            pstmt1.setInt(1,500);
            pstmt1.setInt(2,1);
            pstmt2.setInt(1,500);
            pstmt2.setInt(2,2);
            pstmt1.executeUpdate();
            //若此处有异常
            int i = 3/0;
            pstmt2.executeUpdate();

            connection.commit();
        } catch (Exception e) {//抓取所有异常
            e.printStackTrace();
            try {
                if(connection != null)
                    connection.rollback();//若不为空就回滚
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }finally {
            JDBCUtils.close(connection,pstmt1,null);
            JDBCUtils.close(connection,pstmt2,null);
        }
    }
}

  

一点一点积累,一点一点蜕变!
原文地址:https://www.cnblogs.com/qq2210446939/p/14756097.html