java - 连接关闭时 Activity 事务的行为?

标签 java jdbc

如果调用了close方法,并且有一个活跃的事务,那么活跃的事务会怎样呢?它们会被提交还是回滚?

最佳答案

除了另一个答案之外,我还在 Oracle 和 SQL Server(我目前正在使用的数据库)上测试了行为。

MSSQL 回滚 事务。这是您的直觉预期。

甲骨文在另一边,提交交易。这记录在他们的 JDBC Guide 中。 :

如果自动提交模式被禁用,并且您在没有明确提交或回滚您的最后更改的情况下关闭连接,则会运行隐式 COMMIT 操作。

当然,JDBC 规范允许您自由选择任何一种方式,但我个人认为隐式提交事务是一个糟糕的设计选择。作为一个论点,考虑一个线程的用例,该线程正忙于处理一个长事务并且不响应关闭请求。当应用程序最终关闭连接池时,这将依次关闭连接,提交未完成的事务!

这个故事的寓意是,连接池实现必须始终在手动提交模式下关闭连接之前调用 rollback()。然而,这并不是在实现连接池时才想到的。例如,参见 PooledConnectionImpl from DBCP

关于java - 连接关闭时 Activity 事务的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562609/

相关文章:

java - 存储过程无法从 Hibernate 调用

java - Xtext- doGenerate 在作为 warfile 运行时返回 xtend 符号

sql-server - 无法在 WSO2 数据服务服务器上加载 SQL Server 的驱动程序

java.sql.SQLException : ORA-01704: string literal too long When Insert Or Update

javascript - Thymeleaf 模板无法与内联 JS 一起使用

java - 如何在Java中将日期列表分组到相应的周?

java - 向 RecyclerView 项目添加涟漪效果时“可能过度绘制”

java - 如何监控数据库中的新条目?

java - 使用 Spring JDBC 调试 SQL 查询

java - 连接到 Mysql 数据库 - JDBC 或 PHP