美文网首页
MySQL 基础16 JBDC 事物

MySQL 基础16 JBDC 事物

作者: 小熊先生很不开心 | 来源:发表于2018-03-20 08:38 被阅读3次

1.1 事务的概念

  事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。

1.1.1 事务环境准备

  • 创建数据库和表
create database web_test4;
use web_test4;
create table account(
    id int primary key auto_increment,
    name varchar(20),
    money double
);
insert into account values (null,'aaa',10000);
insert into account values (null,'bbb',10000);
insert into account values (null,'ccc',10000);

1.2 JDBC的事务管理


@Test
    /**
     * 完成转账的案例
     */
    public void demo1(){
        Connection conn = null;
        PreparedStatement pstmt  = null;
        try{
            /**
             * 完成转账代码:
             * * 扣除某个账号的钱
             * * 给另外一个账号加钱
             */
            // 获得连接:
            conn = JDBCUtils.getConnection();
            // 编写SQL语句:
            String sql = "update account set money = money + ? where name = ?";
            // 预编译SQL:
            pstmt = conn.prepareStatement(sql);
            // 设置参数:
            // 用aaa账号给bbb账号转1000元
            pstmt.setDouble(1, -1000);
            pstmt.setString(2, "aaa");
            // 执行SQL:扣除aaa账号1000元
            pstmt.executeUpdate();
            
//          int i = 1 / 0;
            
            // 给bbb账号加1000
            pstmt.setDouble(1, 1000);
            pstmt.setString(2, "bbb");
            pstmt.executeUpdate();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCUtils.release(pstmt, conn);
        }
    }

  在转账中没有添加事务的管理,出现aaa账号的钱被转丢了,但是bbb账号的钱没有任何变化。需要给转账的功能添加事务的管理。

1.3 在转账中添加事务管理

1.3.1 事务管理API

方法摘要
void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。
void commit() 使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁
void rollback() 取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。

1.3.2 在转账中添加事务管理


    @Test
    /**
     * 完成转账的案例
     */
    public void demo1(){
        Connection conn = null;
        PreparedStatement pstmt  = null;
        try{
            /**
             * 完成转账代码:
             * * 扣除某个账号的钱
             * * 给另外一个账号加钱
             */
            // 获得连接:
            conn = JDBCUtils.getConnection();
            // 开启事务
            conn.setAutoCommit(false);
            // 编写SQL语句:
            String sql = "update account set money = money + ? where name = ?";
            // 预编译SQL:
            pstmt = conn.prepareStatement(sql);
            // 设置参数:
            // 用aaa账号给bbb账号转1000元
            pstmt.setDouble(1, -1000);
            pstmt.setString(2, "aaa");
            // 执行SQL:扣除aaa账号1000元
            pstmt.executeUpdate();
            
            int i = 1 / 0;
            
            // 给bbb账号加1000
            pstmt.setDouble(1, 1000);
            pstmt.setString(2, "bbb");
            pstmt.executeUpdate();
            
            // 提交事务:
            conn.commit();
        }catch(Exception e){
            // 回滚事务:
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally{
            JDBCUtils.release(pstmt, conn);
        }
    }

相关文章

  • MySQL 基础16 JBDC 事物

    1.1 事务的概念   事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。 1.1....

  • MySQL JBDC驱动抛出SocketTimeoutExcep

    才工作一两年用Oracle的时候,一些网络问题会造成应用线程一直卡在 SocketInputStream.read...

  • JBDC基础--学习笔记(1)

    一.什么是JDBC? 使用java 代码或程序发送sql语句的技术,就是jdbc技术 使用jdbc发送sql前提 ...

  • java JBDC

    一. 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白...

  • MySql事物

    在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 一般来说,事务是必须满足4个条件(...

  • mysql事物

    1、一天sql语句就是一条事物默认开启默认提交2、可以显示的开启事务、回滚事物、提交事务2.1、开启事务 star...

  • mysql 事物

    来源:转载 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用...

  • MYSQL 事物

    前言 这篇文章主要是讲解 MYSQL 事物相关知识。 什么是 MYSQL ? MySQL 是一个关系型数据库管理系...

  • Mysql事物

    事务的特点: //ACID 不考虑隔离性, 有可能出现以下问题 考虑隔离性:

  • Day16 MySQL基础

    1、DDL 常用数据类型创建表 查看表结构 查看表创建语句 删除表 创建表指定字符集和引擎 修改字段类型 添加字段...

网友评论

      本文标题:MySQL 基础16 JBDC 事物

      本文链接:https://www.haomeiwen.com/subject/cporqftx.html