我试图调试一个应用程序(在PostgreSQL下)并遇到以下错误: “当前事务被中止,命令被忽略”。交易,何时应该丢弃和回滚
据我所知,“事务”只是一个与底层数据库连接有关的概念。
如果连接的自动提交为“false”,那么只要没有失败,就可以通过相同的语句执行查询。在这种情况下,你应该回滚。
如果自动提交是“真”,那么只要您的所有查询都被视为原子,则无关紧要。
使用自动提交假的,我在PostgreSQL中,即使一个简单的
select * from foo
失败了,这让我问,其下的SQLException(S)是一种“交易”视为无效,并应得到上述错误滚动支持或不用于另一个查询?
using MacOS 10.5, Java 1.5.0_16, PostgreSQL 8.3 with JDBC driver 8.1-407.jdbc3
感谢您的澄清。 我做了一些测试,发现当PostgreSQL *下的auto commit设置为false时,如果发生异常,您必须*回滚以执行下一条语句(您可以重复使用现有的语句)。例如,*不是以mySQL为例。 – qnoid 2008-10-12 22:28:17
是的,这是它的工作原理,我不明白在答案中还有什么不清楚的地方。我没有提到它不像其他DBMS那样?为什么这会相关? :)。顺便说一句,你必须做的是完成当前事务或到达一个非错误的保存状态。 – 2008-10-13 08:31:55