事务
(一)事务的概念
事务是应用程序中一个完整的业务逻辑,(包含多个小的单元,每一个小的单元分别对数据库中的数据进行crud操作。)我们通过事务保证所有的小单元,要么同时成功,要么同时失败。也就是说事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 事务的特性(ACID): (1)原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。 (2)一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 (3)隔离性(Isolation):隔离性是当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,即多个并发事务之间互不影响。 (4)持久性(Durability):持久性是指一个事务一旦被提交了,那么对数据库中数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 管理自定义事务的语句: 1. 手动开启事务:connection.setAutoCommit(false); 2. 成功提交:connection.commit();//失败回滚:connection.rallbock()
(二)事务的实现
① 手动开启事务
② 成功 提交
③ 失败 回滚
java中控制事务
package com.offcn.test;
import com.offcn.util.JdbcUtils;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TestTransaction {
@Test
public void test() throws SQLException {
Connection connection = JdbcUtils.getConnection();
PreparedStatement preparedStatement = null;
try {
//关闭自动提交
connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement("update account set money = money + ? where name = ?");
preparedStatement.setObject(1,500);
preparedStatement.setObject(2,"张三");
preparedStatement.executeUpdate();
preparedStatement = connection.prepareStatement("update account set money = money - ? where name = ?");
preparedStatement.setObject(1,500);
preparedStatement.setObject(2,"李四");
preparedStatement.executeUpdate();
//程序没有问题,提交事务
connection.commit();
} catch (SQLException throwables) {
throwables.printStackTrace();
//程序出问题了,回滚事务
connection.rollback();
}finally{
preparedStatement.close();
JdbcUtils.close();
}
}
}