我一直在http://download.oracle.com/javase/tutorial/jdbc/basics/transactions.html阅读一篇有趣的陈述
有趣的部分是:
“捕获一个SQLException告诉你出了什么问题,但是它没有告诉你什么是或者没有提交。因为你不能指望这个事实什么都没有提交,调用方法回滚是唯一确定的方法。“
真的是这样吗?如果我不调用commit但是我得到了一个SQLException,那么我可以不指望什么都没有被提交吗?如果我的程序在没有调用commit或rollback的情况下退出怎么办?我以为交易将自动回滚给我,但这个陈述消除了我的确定性。
答案 0 :(得分:1)
基本上,您考虑在其默认隔离级别使用的任何现代数据库都不会出现此行为。但最终,在那里发生的事情是由JDBC控制的,并且据他所知,你可能正在使用Informix 5或1988 Sybase以及更加便宜的层。
因此,从高级语言API规范的角度来看,如果您没有正确使用它,他们必须声明没有任何保证。基本上它表示如果放弃既不提交也不回滚的连接导致某些已执行的语句出现在数据库级别,那么它将不会被视为JDBC级别的错误 。 (通常对于大多数数据库,我们会考虑数据库级别的错误 ,但同样,JDBC是一个高级API。)
答案 1 :(得分:0)
你可以测试一下,看看会发生什么。
我建议使用Spring来做这些事情。它会自动为您处理tx回滚。