zoukankan      html  css  js  c++  java
  • JDBC——JDBC中的事务、DBUtils使用事务

    什么是事务

    1.概述:事务指的是逻辑上的一组操作,组成这组操作的单元,要不同时成功,要不同时失败
    2.作用:保证在一个事务中,多次SQL操作要么同时成功,要么同时失败
    

    JDBC操作事务

    *事务管理流程
        1.开启事务
        2.执行多条SQL语句,如果没有出现错误,提交事务,将数据持久化存储到数据库
        3.执行多条SQL语句,如果出现错误,回滚事务,将事务状态回滚到开启事务之前
        4.关闭资源
    *JDBC事务操作
        与事务操作相关的方法,都定义在java.sql.Connection接口中
        public void setAutoCommit(boolean flag):将此连接的自动提交模式为给定状态的flag
            **当flag=true:表示自动提交   
            **当flag=fasle:表示手动提交,开启事务
        public void commit():将数据持久化提交到数据库
        public void rollback: 回滚事务
        
    *步骤:
        1.获取Conection连接对象
        2.开启事务 setAutoCommit(false)
        3.定义sql语句
        4.获取PreparedStatement对象
        5.执行sql语句,获得结果
        6.如果sql语句正常执行,没有问题,提交事务
        7.处理结果
        8.如果sql语句执行错误,回滚事务
        9.关闭资源
    *代码体现:
        public class Jdbc_affairDemo8 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;
    
        //1. 获取连接
        try {
            conn = JDBCUtils.getConnection();
            // 建立连接后开启事务
            conn.setAutoCommit(false);
    
            //2. 定义sql
            //2.1 张三 - 500
            String sql1 = "update account set balance = balance - ? where id = ?";
            //2.2 李四 + 500
            String sql2 = "update account set balance = balance + ? where id = ?";
    
            //3. 获取执行的sql对象
            pstmt1 = conn.prepareStatement(sql1);
            pstmt2 = conn.prepareStatement(sql2);
    
            //4. 设置参数
            pstmt1.setDouble(1, 500);
            pstmt1.setInt(2, 1);
    
            pstmt2.setDouble(1, 500);
            pstmt2.setInt(2, 2);
    
            //5. 执行sql
            pstmt1.executeUpdate();
            // 手动制造异常
            int i = 3 / 0;
            pstmt2.executeUpdate();
    
            // 提交事务
            conn.commit();
    
        } catch (SQLException e) {
            // 事务回滚
            if (conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
            e.printStackTrace();
        } finally {
            JDBCUtils.close(pstmt1, conn);
            JDBCUtils.close(pstmt2, null);
        }
    }
    

    }

  • 相关阅读:
    selenium模拟浏览器进行百度搜索
    爬虫出现Forbidden by robots.txt
    Scrapy和Headless Chrome采集动态网站数据
    爬虫框架Scrapy的安装与基本使用
    Python Selenium库的使用
    拦截器HandlerInterceptorAdapter使用方法
    Python多进程并发(multiprocessing)
    Oracle自定义DES3加解密
    Springboot手动添加quartz-jobs
    python 发送邮件接口
  • 原文地址:https://www.cnblogs.com/linjing111/p/12723014.html
Copyright © 2011-2022 走看看