事物

2018-12-29  本文已影响0人  所以然WZY

1:事务的概述:
什么是事务:事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败.
事务作用:保证在一个事务中多次操作要么全都成功,要么全都失败.
2:创建一个maven工程,进行如下导包操作:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
3:事务有四大特性:

安全性:serializable > repeatable read > read committed > read uncommitted
效率 :serializable< repeatable read < read committed < read uncommitted
MYSQL :repeatable read
Oracle :read committed
6:转账案例

package com.com.pp.Money;

import com.com.pp.util.JdbcUtil;

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

public class Pay {
    public static void main(String[] args) throws SQLException {
        Connection connection = JdbcUtil.getConnection();
        //事物提交
        connection.setAutoCommit(false);//默认不是自动提交
        connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
        outMoney("a",1000);
        int i=1/0;//异常,保证转出和转入同时执行
        inMoney("b",1000);
        /*
        * 同时成功和同时失败
        * */
        connection.commit();
        connection.close();

    }
    /*
    * 转入
    * */
    public  static void inMoney(String name,double money) throws SQLException {
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        //实例化
        String sql="update account set money=money+? where name=?";
        PreparedStatement preparedStatement1 = connection.prepareStatement(sql);
        preparedStatement.setDouble(1,money);
        preparedStatement.setString(2,name);
        preparedStatement.executeUpdate();
        JdbcUtil.closeResouce(connection,preparedStatement,null);
    }
    /*
     * 转出
     * */
    public  static void outMoney(String name,double money) throws SQLException {
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        //实例化
        Connection connection1 = JdbcUtil.getConnection();
        String sql="update account set money=money-? where name=?";
        PreparedStatement preparedStatement1 = connection.prepareStatement(sql);
        preparedStatement.setDouble(1,money);
        preparedStatement.setString(2,name);
        preparedStatement.executeUpdate();
        JdbcUtil.closeResouce(connection,preparedStatement,null);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读