事务

事务概述

1.什么是事务

2.事务的四大特性(ACID)

Mysql中的事务

JDBC事务

1.JDBC中的事务

案例:转账

 AccountDao.java

package cn.cmlx.jdbctransaction;

import java.sql.Connection;
import java.sql.PreparedStatement;
public class AccountDao {
    /**
     * 修改指定用户的余额
     */
    public void updateBalance(Connection con,String name,double balance) {
        try {
            /*
             * 1.得到连接
             */
            /*
             * 2.给出sql模板,创建pstmt
             */
            String sql = "UPDATE account SET balance=balance+? where name=?";
            PreparedStatement pstmt = con.prepareStatement(sql);
            /*
             * 3.给参数进行赋值
             */
            pstmt.setDouble(1, balance);
            pstmt.setString(2, name);
            /*
             * 4.执行
             */
            pstmt.executeUpdate();
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

 

 

package cn.cmlx.jdbctransaction;

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

import org.junit.Test;

import cn.cmlx.jdbcutils.JdbcUtil1;

/**
 * 演示转账
 * 
 * @author 赤名莉香 所有对Connection的操作都在Service层进行的处理!
 *         所以必须对这一问题进行处理,要把所有对Connection的操作隐藏起来!这需要使用自定义的小工具!
 */
public class JdbcTransaction {
    /**
     * 转账方法
     * 
     * @param from
     * @param to
     * @param money
     */
    public void transfere(String from, String to, double money) {
        // 对事务的操作必须使用Connection对象
        Connection con = null;
        try {
            con = JdbcUtil1.getConnection();
            // 开启事务
            con.setAutoCommit(false);

            AccountDao dao = new AccountDao();
            dao.updateBalance(con, from, -money);// 给from减去相应的钱
            dao.updateBalance(con, to, money);// 给to加上相应的金额
            // 提交事务
            con.commit();
            con.close();
        } catch (Exception e) {
            // 回滚事务
            try {
                con.rollback();
                con.close();
            } catch (SQLException e1) {
            }
        }
    }
    @Test
    public void fun() {
        transfere("赤名莉香", "郑强", 520);
    }
}

事务隔离级别

  案例:

   

    

  不可重复读和幻读的区别

    

 

posted @ 2018-08-21 12:54  cmlx  阅读(168)  评论(0)    收藏  举报