jdbc事物回滚是否需要重新commit 不需要

 

....

Connection con = null;

Statement st = null;

try{

    Class.forName("oracle.jdbc.driver.OracleDriver");

    con = DriverManager.getConnection("...","...","...");

    //设置事物处理

    con.setAutoCommit(false);

    st = ct.createStatement();

    st.executeUpdate("update...");

    st.executeUpdate("update...");

    con.commit();

}catch(Exception e){

    con.rollback(); 

       //回滚之后要不要再commit下?

    e.printStackTrace();

}finally{

    st.close();

    con.close();

}

 

不需要

https://bbs.youkuaiyun.com/topics/380024065

 

提交后回滚可以吗?解决方案

 

------解决方案--------------------------------------------------------1、虚拟机; 2、搭建e69da5e887aa3231313335323631343130323136353331333332636334测试环境; 3、先备份数据库,测试完再还原; ------解决方案--------------------------------------------------------看flashback功能开起来没有,开起来的话直接闪回就好了 ------解决方案--------------------------------------------------------flashback 或者冷备份 ------解决方案--------------------------------------------------------如果开了闪回就可以,没开的话 alter database flashback on; ------解决方案--------------------------------------------------------flashback ------解决方案--------------------------------------------------------

对于一个事物来说,你提交后就没有所谓的回滚了,只能在提交前回滚。

### Java 中事务回滚的概念 在Java应用程序中,特别是在使用JDBC进行数据库操作时,事务回滚是指当某个事务中的任何一部分出现问题时,整个事务将被撤销并恢复到最初的状态。这确保了即使某些操作失败,也会破坏数据的一致性和完整性[^2]。 #### 事务的ACID特性 事务必须遵循四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability)。其中,原子性意味着所有操作要么全部完成,要么完全执行;而一致性则保证了事务前后系统的状态都是合法有效的[^4]。 ### 实现方式 对于JDBC而言,默认情况下每次SQL语句都会立即提交给数据库永久保存下来。然而,如果希望将多条指令组合成单个可分割的操作,则需先关闭自动提交模式: ```java connection.setAutoCommit(false); ``` 接着可以在try-catch-finally块内编写业务逻辑代码,并尝试正常结束事务: ```java try { // 执行一系列更新/插入等操作... connection.commit(); // 成功后手动确认提交 } catch (SQLException e) { try { connection.rollback(); // 出错时回退至上一次稳定点 } catch (SQLException ex) { System.err.println("Rollback failed."); } } finally{ if(connection != null){ try { connection.close(); } catch (SQLException e) {} } } ``` 这段程序展示了如何通过`commit()`函数显式地提交更改,而在遇到异常情况时利用`rollback()`来回撤之前所做的变更。这样做的好处是可以更好地控制何时应该真正影响底层的数据表结构。 另外,在Spring框架环境下,通常需要直接操控Connection对象来管理事务生命周期。相反,开发者可以依赖声明式的编程模型——即借助@Transactional注解来自动生成必要的代理实例负责处理这些细节工作。与此同时,PlatformTransactionManager接口及其子类提供了更加灵活的方法去定义同场景下的行为策略[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值