jdbc中利用Savepoint实现rollback

本文探讨了在JDBC中使用setAutoCommit进行手动提交事务的重要性,并通过实例演示了如何利用回滚点实现部分更新的撤销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们来说一下setAutoCommit,当我们设置为true或默认情况下,jdbc事务会自动提交,当我们将setAutoCommit设为false时,虽然是手动提交事务,但是如果不写手动提交代码,最后也会提交。那有什么不一样呢,例如:我们在一个方法内多次执行数据库操作,中间有根据状态或上一返回值来确定是否回滚的情况下,如果是自动提交,那回滚就不起作用,如果是手动提交状态,那回滚就有效。

接下来还是看Savepoint

con.setAutoCommit(false);
Savepoint first=con.setSavepoint("first");
ps=con.prepareStatement("update employees t set t.first_name='guohr1' where t.employee_id=207");
flag=ps.executeUpdate();
log.info("flag:"+flag);

Savepoint second=con.setSavepoint("second");
ps=con.prepareStatement("update employees t set t.first_name='guohr2' where t.employee_id=207");
flag=ps.executeUpdate();
log.info("flag:"+flag);

Savepoint third=con.setSavepoint("third");
ps=con.prepareStatement("update employees t set t.first_name='guohr3' where t.employee_id=207");
flag=ps.executeUpdate();
log.info("flag:"+flag);

con.rollback(second);

我在每次update前创建了一个回滚点,当最后rollback的时候如果参数如上为second,那么first_name='guohr1',如果参数为third,那么为guohr2,当然实际中不是像滚雪球一样这么随意滚的,可以根据前面返回的状态或值来判断是否需要回滚及滚到哪一步之前。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值