手动提交事务回滚没有释放数据库连接

注意点:

  1. 开启事务之后,不能没有commit或者回滚就return,return并没有关闭数据库连接会造成数据库连接池的连接数超过设置最大值
  2. 可以参考这种写法
try{
       // 事务定义
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        // 传播范围
        def.setPropagationBehavior(propagate);
        TransactionStatus transactionStatus = transManager.getTransaction(def);
        //业务处理
}catch(Exception e){
       //回滚
       transactionManager.rollback(transactionStatus);
}finally{
        if (transactionStatus != null && transactionStatus.isNewTransaction() 
                        && !transactionStatus.isCompleted()) {
                 //TODO: arms日志输出 堆栈相关信息
                transactionManager.commit(transactionStatus);
       }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,当需要在数据库中执行多个操作时,我们通常使用事务来保证这些操作的原子性和一致性。事务通常被认为是一个完整的工作单元,其中的所有操作都要么全部成功,要么全部失败,如果其中一个操作失败了,则整个事务都回滚,以确保数据一致性。 在Java中,我们可以通过手动提交事务来确保事务的正确执行。Java中使用JDBC(Java数据库连接)API来操作数据库,我们可以使用Connection对象来管理事务。当我们需要执行一组关联的SQL语句作为一个事务时,我们需要执行以下步骤: 1.获取数据库连接:我们需要使用DriverManager类的getConnection()方法来获取与数据库的连接。获取连接必须指定数据库的连接URL、用户名和密码。 2.关闭自动提交:默认情况下,每个执行的SQL语句都是自动提交的。为了将多个操作作为单个事务执行,我们需要将连接的自动提交设置为false。设置自动提交为false的方法是:connection.setAutoCommit(false); 3.执行SQL语句:我们可以使用Statement或PreparedStatement对象执行SQL查询和更新。如果在执行SQL语句时发生错误,则抛出SQLException异常。 4.提交回滚事务:如果事务中的所有操作都成功执行,则我们需要手动提交事务。通过执行connection.commit()来提交事务。如果在事务中的任何操作失败,则整个事务将被回滚回滚可以通过执行connection.rollback()方法。 5.释放连接:一旦所有操作都已提交回滚,我们需要释放数据库连接,这可以通过执行connection.close()方法实现。 总的来说,在Java中手动提交事务是确保在多个操作中维护数据一致性的重要步骤。我们可以通过连接对象来控制事务,从而确保所有操作一起执行,使所有操作要么全部成功,要么全部失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值