【学习笔记】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;
那么事务就会回滚
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!