菜鸟笔记
提升您的技术认知

事务提交和回滚机制-ag真人游戏

事务的特点  -  acid 特性

a - atomicity  原子性 : 不可分割, 只有成功和失败两种结果。

c - consistency  一致性:  事务前后数据状态要保持完全一致, 总数一致

i - isolation -  隔离性 : 多个事务不能看到对方的中间状态(提交或者回滚之前的状态)

d - duration 持久性: 事务完成后数据要持久化(事务的影响要反映在物理存储上)
 

事务的两种状态:

事务的提交:是指事务里的所有操作都正常完成。

事务的回滚:是指程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。

实例:

import java.sql.*;
public class transaction {
    private final static string url = "jdbc:mysql://localhost:3306/test1";
    private final static string user = "root";
    private final static string password = "root";
    public static void main(string[] args) {
        connection connection = null;
        preparedstatement preparedstatement = null;
        resultset resultset = null;
        try {
            class.forname("com.mysql.jdbc.driver");
            connection = drivermanager.getconnection(url, user, password);
//            关闭自动提交事务
            connection.setautocommit(false);
//            第一步:停止自动提交事务之后,开始向表中录入数据
//            录入订单主表
            string sql = "insert into orders(order_no,customer,order_date) values (?,?,?)";
            preparedstatement = connection.preparestatement(sql);
            preparedstatement.setstring(1,"20201201");
            preparedstatement.setstring(2,"李**");
            preparedstatement.setstring(3, "2020-1-1");
            preparedstatement.executeupdate();
//             第二步:查询订单主键
            sql = "select max(order_id) from orders ";
            preparedstatement = connection.preparestatement(sql);
            resultset = preparedstatement.executequery();
            int id = 0;
            if (resultset.next()){
                id = resultset.getint(1);
                system.out.println(id);
            }
//            第三部分:根据查到的orders表中的id编号进行数据添加
            sql = "insert into "  
                    "order_detail(order_id,goods_name,goods_num,googs_price)"  
                    "values(?,?,?,?)";
            preparedstatement = connection.preparestatement(sql);
//            绑定参数
            preparedstatement.setint(1,id);
            preparedstatement.setstring(2,"电脑");
            preparedstatement.setint(3,10);
            preparedstatement.setdouble(4,100);
            preparedstatement.executeupdate();
            connection.commit();
            system.out.println("事务提交");
        } catch (classnotfoundexception e) {
            e.printstacktrace();
        } catch (sqlexception e) {
            e.printstacktrace();
            try {
                connection.rollback();
                system.out.println("事务回滚");
            } catch (sqlexception ex) {
                ex.printstacktrace();
            }
        }finally {
            try {
                if (resultset!=null){
                    resultset.close();
                }
                if (preparedstatement!=null){
                    preparedstatement.close();
                }
                if (connection!=null){
                    connection.close();
                }
            } catch (sqlexception e) {
                e.printstacktrace();
            }
        }
    }
}

网站地图