当前位置: 首页 > news >正文

JDBC操作事务

MySQL 数据库学习笔记(续)

十、JDBC 重点!!!

10.8 使用IDEA连接数据库


10.9 JDBC操作事务

事务:要么都成功,要么都失败

ACID原则:

  • 原子性:要么全部完成,要么都不完成
  • 一致性:总数不变
  • 隔离性:多个进程互不干扰
  • 持久性:一旦提交不可逆,持久化到数据库了

隔离性的问题:

  • 脏读:一个事务读取了另一个没有提交的事务
  • 不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了改变
  • 虚读(幻读):在一个事务内,读取到了别人插入的数据,导致前后读出来的结果不一致

代码实现

  1. 开启事务 conn.setAutoCommit(false);
  2. 一组业务执行完毕,提交事务 conn.commit();
  3. 可以在catch语句中显示的定义回滚语句,但默认失败就会回滚
package com.guo.lesson04;import com.guo.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestTransaction1 {public static void main(String[] args) {Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();//关闭数据库的自动提交功能,自动会开启事务conn.setAutoCommit(false);//开启事务//String sql1 = "update account set money=money-100 where name = 'A'";st = conn.prepareStatement(sql1);st.executeUpdate();String sql2 = "update account set money=money+100 where name = 'B'";st = conn.prepareStatement(sql2);st.executeUpdate();//业务完毕,提交事务conn.commit();System.out.println("成功!");} catch (SQLException e) {try {conn.rollback(); //如果失败则回滚事务} catch (SQLException ex) {throw new RuntimeException(ex);}throw new RuntimeException(e);} finally {JdbcUtils.release(conn,st,rs);}}
}
package com.guo.lesson04;import com.guo.lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestTransaction2 {public static void main(String[] args) {Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();//关闭数据库的自动提交功能,自动会开启事务conn.setAutoCommit(false);//开启事务//String sql1 = "update account set money=money-100 where name = 'A'";st = conn.prepareStatement(sql1);st.executeUpdate();int x = 1/0;String sql2 = "update account set money=money+100 where name = 'B'";st = conn.prepareStatement(sql2);st.executeUpdate();//业务完毕,提交事务conn.commit();System.out.println("成功!");} catch (Exception e) {//如果失败,则默认回滚
/*            try {conn.rollback(); //如果失败则回滚事务System.out.println("事务失败,已回滚");} catch (SQLException ex) {throw new RuntimeException(ex);}*/throw new RuntimeException(e);} finally {JdbcUtils.release(conn,st,rs);}}
}

总结

  1. JDBC 事务核心:关闭自动提交 setAutoCommit(false)
  2. 正常执行 → commit() 提交
  3. 出现异常 → 自动回滚,也可手动 rollback()
  4. 保证转账、扣款等业务数据绝对安全
http://www.jsqmd.com/news/651445/

相关文章:

  • 3分钟快速上手:CardEditor卡牌批量生成器终极使用指南
  • LD3320语音识别芯片:从硬件架构到智能交互的全面解析
  • 计算机毕业设计:Python农业与气候数据可视化分析系统 Django框架 数据分析 可视化 爬虫 机器学习 大数据 深度学习(建议收藏)✅
  • 如何完整备份QQ空间:终极免费工具使用指南
  • Android开发者必看:VLC播放器options参数全解析(附实战代码)
  • DLSS Swapper:智能管理NVIDIA显卡DLSS文件的完整解决方案
  • 开源实践 | 基于深度盲超分的高光谱图像复原:从理论到代码实现
  • 避开VS2022的坑!Win10/11下用VS2019+CMake编译GTSAM 4.0.3 MATLAB工具箱全记录
  • 高采样率为何反而引入更多噪声?深入解析ADC采样中的噪声机制
  • 终极指南:TES5Edit零代码掌握上古卷轴5模组制作
  • 给 AI 装“技能”:Agent Skills 完全指南
  • 一键全选:OneMore插件如何让表格操作效率飙升300%
  • 如何用TwinCAT3制作加密库文件?保护你的PLC代码不被查看
  • YOLOV5训练中断恢复与轮数扩展的实战技巧
  • C/C++调试实战:如何用backtrace_symbols快速定位段错误(附完整代码)
  • 思科ISE紧急安全警报:两个CVSS 10.0级RCE漏洞可实现未授权远程完全接管
  • 4x4矩阵键盘的两种扫描方式对比:行列式vs线翻式(附STM32移植指南)
  • 国产优选:耐达讯自动化EtherCAT转RS232在工业协议转换中的卓越表现
  • Zemax公差分析实战:从‘过定位’到‘可制造性’,一个连续变焦红外镜头的优化避坑指南
  • 网络视听用户达 10.99 亿 微短剧成出海主力
  • Open WebUI架构解密:构建企业级AI助手的隐私优先解决方案
  • 基于Tecplot与MATLAB协同实现三维科学数据可视化的完整流程解析
  • 尝试使用302重定向加速国外服务器速度
  • Unity 自动化工具:一键提取并优化 Mixamo FBX 动画切片 (AnimationClip)
  • Latex写论文/报告必备:对比hyperref与pdfcomment,哪个才是生成PDF书签的最佳选择?
  • 别再乱调学习率了!用PyTorch的5种Scheduler画图对比,实战选型指南
  • 永磁同步电机鲁棒电流预测控制进阶:扩展状态观测器(ESO)的设计、离散化与参数整定实战解析
  • 从DIY树莓派到量产智能硬件:工程师如何根据项目选对芯片(CPU/MPU/MCU/SoC实战指南)
  • 别再只聊Socket了!从零搭建一个IM系统,你得先搞懂这五个核心模块
  • 每日安全情报报告 · 2026-04-16