事务
事务概述

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); } }
事务隔离级别


案例:


不可重复读和幻读的区别






浙公网安备 33010602011771号