开启事务(关闭自动提交就默认开启事务)

conn.setAutoCommit(false);

可以在catch写回滚,但事务失败就默认回滚

catch (SQLException e) {
//            若事务提交失败,自动回滚
//            try {
//                conn.rollback();
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }

成功的:

package com.esd.demo03;

import com.esd.utils.JdbcUtils;

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

public class jdbc事务 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pre = null;

        try{
            conn = JdbcUtils.getConnection();
            //关闭数据库自动提交,自动开启事务
            conn.setAutoCommit(false);
            String sql1="UPDATE `account`set money=money-100 where id='1'";
            pre = conn.prepareStatement(sql1);
            pre.executeUpdate();

            String sql2="UPDATE `account`set money=money+100 where id='2'";
            pre = conn.prepareStatement(sql2);
            pre.executeUpdate();

//            关闭事务
            conn.commit();
            System.out.println("提交成功");

        } catch (SQLException e) {
//            若事务提交失败,自动回滚
//            try {
//                conn.rollback();
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,pre,null);
        }
    }
}

失败:

package com.esd.demo03;

import com.esd.utils.JdbcUtils;

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

public class failed {

        public static void main(String[] args) {
            Connection conn = null;
            PreparedStatement pre = null;

            try{
                conn = JdbcUtils.getConnection();
                //关闭数据库自动提交,自动开启事务
                conn.setAutoCommit(false);
                String sql1="UPDATE `account`set money=money-100 where id='1'";
                pre = conn.prepareStatement(sql1);
                pre.executeUpdate();

                int x=1/0;//报错,0不能被除,事务失败

                String sql2="UPDATE `account`set money=money+100 where id='2'";
                pre = conn.prepareStatement(sql2);
                pre.executeUpdate();

//            关闭事务
                conn.commit();
                System.out.println("提交成功");

            } catch (SQLException e) {
//            若事务提交失败,自动回滚
//            try {
//                conn.rollback();
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }
                e.printStackTrace();
            }finally {
                JdbcUtils.release(conn,pre,null);
            }
        }
    }

 

posted on 2022-05-22 00:40  阿霖找BUG  阅读(66)  评论(0)    收藏  举报