概述
- 事务是逻辑上的一组操作,要么全部成功,要么全部失败
- 保证数据的安全性和完整性
事务的操作
面向数据库的操作
开启事务
start transaction;
提交事务
commit;
回滚事务
rollback;
JDBC操作数据库事务
java.sql.Connection接口的方法
开启事务
void setAutoCommit(boolean autoCommit);
默认参数为true,即为自动提交事务
提交事务
void commit();
回滚事务
void rollback();
案例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
/**
* @Title: JDBCDemo
* @Description:使用Connection对象,操作事务
* @author jsz
* @date 2018年7月22日
*/
public class JDBCDemo {
public static void main(String[] args) throws Exception {
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接
Connection con = DriverManager.getConnection("jdbc:mysql:///itheima", "root", "root");
// 3.开启事务
con.setAutoCommit(false);
// 4.编写SQL语句
String sql = "insert into users values(?,?)";
// 5.获取执行SQL语句的对象
PreparedStatement pst = con.prepareStatement(sql);
// 6.给占位符赋值
pst.setObject(1, "tom");
pst.setObject(2, "123");
// 7.执行SQL语句
int row = pst.executeUpdate();
System.out.println(row);
// 8.回滚事务
con.rollback();
}
}
DBUtils工具类操作数据库事务
QueryRunner
QueryRunner() ----->要想使用事务,必须使用无参构造
QueryRunner(DataSource ds)------>每一条sql语句都是一个独立的事务
query(Connection, String, ResultSetHandler, Object...)
update(Connection conn, String sql, Object... params)
ResultSetHandler
事务的特性
- 原子性;(事务内的操作是一个整体,不可分割);
- 一致性;(在事务开启之后,到事务提交之前,应该保证事务的操作不能改变);
- 隔离性;(一个事务在执行期间不能受到其他事务的干扰)
- 持久性;(事务一旦结束,结果就不能再次改变);