美文网首页
事务的基本使用

事务的基本使用

作者: 折腾怪 | 来源:发表于2016-11-28 22:41 被阅读0次

闲来无事,写一写事务的简单用法。

先假设有这样一个场景,A转账给B若干人民币,其中的流程可以简单理解为:系统先从A账户上扣除相应金额,然后再加到B的账户上去。可是如果在其中由于某种原因导致没有将金额加到B的账户上,那么这若干人民币就会不翼而飞。这时候就可以使用“事务”进行处理。

可以简单的将事务理解为一个逻辑单元,在其中有一些操作逻辑,它们是一个整体,只要在其中的任一环节操作出了问题,就可以回退到初始状态。
主要涉及到的包及方法如下:

java.sql.Connection:
setAutoCommit(boolean);      //设置是否自动提交,一旦提交即可以理解为持久更改数据操作,如果设置为false,则需要手动提交
commit();    //手动提交更改,使之成为永久更改
rollback();   //回滚到初始状态
rollback(Savepoint);    //配合setSavepoint()可回滚到指定的状态
setSavepoint();    //返回一个Savepoint,我将它理解成为一个状态

一言不合贴代码

package test;

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

import org.junit.Test;

import utils.DBUtil;

//测试事务
public class A {

    String a1 = "UPDATE money SET money=money-500 WHERE accountName='a';";
    String a2 = "UPDATE money SET money=money+500 WHERE accountName='b';";
    String a3 = "UPDATE1 money SET money=money+500 WHERE accountName='b';";
    
    @Test
    public void test(){
        
        Connection conn = DBUtil.getConnection();
        Savepoint sp = null;
        
        
        try {
            
            conn.setAutoCommit(false);        //设置为不自动提交
            PreparedStatement pstmt;
            
            //第一次执行
            pstmt = conn.prepareStatement(a1);
            pstmt.executeUpdate();
            
            pstmt = conn.prepareStatement(a2);
            pstmt.executeUpdate();
            
            sp = conn.setSavepoint();        //设置状态
            
            //第二次执行
            pstmt = conn.prepareStatement(a1);
            pstmt.executeUpdate();
            
            pstmt = conn.prepareStatement(a3);
            pstmt.executeUpdate();
            
        } catch (SQLException e) {
            
            try {
                conn.rollback(sp);            //回滚到指定的状态
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            
            e.printStackTrace();
        }finally{
            try {
                conn.commit();        //手动提交
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

相关文章

  • 事务的基本使用

    闲来无事,写一写事务的简单用法。 先假设有这样一个场景,A转账给B若干人民币,其中的流程可以简单理解为:系统先从A...

  • Redis学习笔记

    一、Redis事务 Redis实现了基本的事务功能,但是不具有回滚功能。Redis通过使用 MULTI和EXEC两...

  • spring事务管理

    1. 事务管理的基本原理 spring事务管理实际上数据库对事务的支持,在java中使用的是JDBC的事务管理机制...

  • Spring 事务管理

    一、事务的基本原理 还记得我们在使用JDBC管理事务的时候是怎样处理的呢?java.sql.Connection ...

  • mysql笔记

    基本概念 ACID 隔离级别 事务日志 在事务中混合使用存储引擎 参数 MMVC多版本并发控制 间隙锁 InnoD...

  • Vue入门 基本使用 与 事务管理【1】

    Vue入门 基本使用 与 事务管理【1】[https://developer.aliyun.com/article...

  • Spring事务的浅析

    1. 事务的使用 Spring中的事务有以下几种使用方式 编程式事务; 使用XML配置声明式事务; 使用注解配置声...

  • springboot+mybatis-plus 多容器时,解决S

    背景:在基于SpringBoot 项目进行开发时候,配置事务的操作特别容易,基本使用注解:org.springfr...

  • 【spring】spring事务

    2019-05-25 声明式事务 使用注解定义事务 @Transactional 使用xml配置事务

  • 数据库事务管理

    事务基本概念 《Transaction 那点事儿》这篇文章通俗易懂的讲解了事务的基本概念、事务特性、引发的问题、J...

网友评论

      本文标题:事务的基本使用

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