事务处理
事务:
具备一致性、原子性、隔离性
为了多条语句绑定生效,所以设置默认不提交,执行结束后统一提交
只要在提交前出现异常,则出现异常之前执行过的语句也不会产生数据持久化,因为数据还没有提交
在过程中产生异常,需要将数据返回值操作之前,需要设置一个回滚点,但不是必须的,然后在出现异常时,启动回滚
设置回滚点:
Savepoint point = con.setSavepoint();
启动回滚:
//回滚事务:一般都是不需要设置回滚点的,因为会让其直接回到执行前的原点
con.rollback();
//根据设置的回滚点位置,进行事务回滚
con.rollback(point);
/** * 事务处理 * 事务具备原子性和持久化的特性 * * 能够将多条增删改语句作为一个整体一起提交,完成持久化 * 如果其中有任意一条执行失败,整个事务都将会回滚 */ public class Demo9 { public static void main(String[] args)throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/geekhome", "root", "tjhilu"); //将事务的自动提交方法更改为手动提交 con.setAutoCommit(false); //设置回滚点 Savepoint point = con.setSavepoint(); PreparedStatement pstmt = con.prepareStatement("update account set balance=balance-200 where cardid=1"); pstmt.executeUpdate(); if(true){ //回滚事务 //con.rollback(); //根据设置的回滚点位置,进行事务回滚 con.rollback(point); throw new RuntimeException("转账失败"); }
PreparedStatement pstmt2 = con.prepareStatement("update account set balance=balance+200 where cardid=2"); pstmt2.executeUpdate(); //提交事务:为了多条语句绑定生效,所以设置默认不提交,执行结束后统一提交 con.commit(); pstmt.close(); con.close(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!