【学习笔记】JDBC操作事务
事务的原则:ACID
-
原子性:全部成功,或全部失败
-
一致性:事务执行前后数据一致
-
隔离性:两个事务互不干扰
-
持久性:一旦提交,不可不可逆,持久化到数据库
隔离性带来的问题
脏读:一个事务读取到了另一个事务没有提交的数据
不可重复度:在一个事务内,多次读取,数据发生变化
幻读(虚读):在一个事务内,读取到了别人插入的数据,导致前后读出来的数据不一致
JDBC操作事务
connection 代表数据库
package com.lesson04;
import com.lesson02.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBCAffairs {
public static void main(String[] args) throws SQLException {
Connection connection = JdbcUtils.getConnection();
PreparedStatement ps = null;
//关闭自动提交,自动开启事务
connection.setAutoCommit(false);
String sql1 = "update account set money = money-100 where `NAME` = '张三'";
ps = connection.prepareStatement(sql1);
ps.executeUpdate();
String sql2 = "update account set money = money+100 where `NAME` = '李四'";
ps = connection.prepareStatement(sql2);
ps.executeUpdate();
//提交事务
connection.commit();
System.out.println("提交成功");
//回滚,即使不显示定义,事务提交失败也会自动回滚
connection.rollback();
//开启自动提交
connection.setAutoCommit(true);
JdbcUtils.release(connection,ps,null);
}
}
如果在提交事务之前,加一条错误的语句 如 int i = 1/0;
那么事务就会回滚