jdbc 事物

jdbc 事物

一、什么是事务?

事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。

二、事务是必须满足4个条件(ACID)

事务的原子性( Atomicity):一组事务,要么成功;要么撤回。

一致性 (Consistency):事务执行后,数据库状态与其他业务规则保持一致。如转账业务,无论事务执行成功否,参与转账的两个账号余额之和应该是不变的。

隔离性(Isolation):事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

持久性(Durability):软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里

三.jdbc事物:

JDBC处理事务的代码格式:

try{
     con.setAutoCommit(false);//开启事务
     ......
     con.commit();//try的最后提交事务      
} catch() {
    con.rollback();//回滚事务
}

示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class Text {
    public static void main(String[] args)  {
        String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "1234";
        Connection conn = null;
        try {
            //1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.连接数据库
            conn = DriverManager.getConnection(url, username, password);
            //3.通知数据库开启事物,false代表开启
            conn.setAutoCommit(false);
            //4.创建sql语句
            String sql1 = "update accout set money = money-100 where name = 'A'";
            conn.prepareStatement(sql1).executeUpdate();

            String sql2 = "update accout set money = money+100 where name = 'B'";
            conn.prepareStatement(sql2).executeUpdate();
            //5.提交事物: 上面的两个sql语句都执行成功了 才会提交
            conn.commit();

        } catch (Exception e) {
            try {
                //如果出现异常就通知数据库回滚事物
                conn.rollback();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            e.printStackTrace();
        }
    }

}

 

posted @ 2020-12-28 09:26  lovelife80  阅读(154)  评论(0编辑  收藏  举报