如果调用close方法并且存在活动事务,那么活动事务会发生什么情况?他们会被提交还是回滚?连接关闭时活动事务的行为?
4
A
回答
1
从Connection.close()
的Javadoc:
据强烈建议该应用程序显式提交或调用Close方法之前回滚活动事务。 如果调用close方法并且存在活动事务,则结果是实现定义的。
3
添加到另一个答案,我测试了Oracle和SQL Server,我目前正在使用的数据库上的行为。
MSSQL 回滚该交易。这是你直觉上期望的。
Oracle在另一边,提交该交易。这在JDBC Guide中有记录:
如果自动提交模式被禁用,并且在没有明确提交或回滚上次更改的情况下关闭连接,则会运行隐式COMMIT操作。
当然,JDBC规范给你自由去任何一种方式,但我个人认为暗中提交事务是一个糟糕的设计选择。作为一个参数,考虑忙于处理long-ish事务并且不响应关闭请求的线程的用例。当应用程序最终关闭连接池时,这将依次关闭连接,提交未完成的事务!
这个故事的寓意是连接池实现必须始终在手动提交模式下关闭连接之前调用rollback()。然而,这并不是在实现连接池时想到的。作为一个例子,参见PooledConnectionImpl from DBCP
相关问题
- 1. c3p0连接池充分事件连接关闭时关闭
- 2. 关闭Twisted中的非活动连接
- 3. 使用RMySQL关闭活动连接
- 4. 在Linux基地服务器上关闭活动连接
- 5. 底层连接已关闭。预计将保持活动的连接被服务器关闭
- 6. 企业库5.0强行关闭活动连接
- 7. 在抛出异常时回滚事务并关闭连接
- 8. SQLAlchemy事件触发Celery任务时关闭连接
- 9. 当没有互联网连接时,活动关闭
- 10. 尝试异步连接到twitter时活动关闭
- 11. Android:在关闭WiFi时关闭活动
- 12. 关闭连接服务器
- 13. Spring管理事务处理结果为关闭连接
- 14. 屏幕关闭时的时髦android活动行为?
- 15. 当活动关闭时运行代码
- 16. 连接丢失时自动关闭PuTTY
- 17. 关闭活动后执行
- 18. 超时:底层连接已关闭:连接意外关闭
- 19. Websocket连接自动关闭?
- 20. mysql_pconnect()连接何时关闭
- 21. 何时关闭http连接
- 22. Hibernate事务和物理事务同时启动和关闭?
- 23. 关闭连接
- 24. 关闭任务中的所有活动
- 25. 密集的GC活动会关闭服务临时服务
- 26. 打开和关闭事务中的数据库连接
- 27. 如何关闭与活动目录的LDAP连接
- 28. 如何关闭活动的SQL Server连接?
- 29. 如何关闭Postgres中的不活动连接
- 30. 试图关闭活动的TCP连接,但得到错误
我对'JDBC'没有特别的经验,所以不会提供这个答案,但如果没有发送'commit'并且连接关闭,那么'rollback'只会是逻辑的,不是吗? – Nanne