我正在尝试调试应用程序(在 PostgreSQL 下)并遇到以下错误: “当前事务中止,命令被忽略”。
据我所知,“事务”只是与底层数据库连接相关的概念。
如果连接有一个自动提交“false”,只要它没有失败,您就可以通过同一个语句执行查询。在这种情况下,您应该回滚。
如果自动提交是“真”,那么只要您的所有查询都被认为是原子的,这并不重要。
使用 auto commit false,即使是一个简单的
select * from foo
失败,这让我想问,在哪种情况下 SQLException 是被认为无效的“事务”,应该回滚或不用于其他查询?
using MacOS 10.5, Java 1.5.0_16, PostgreSQL 8.3 with JDBC driver 8.1-407.jdbc3
最佳答案
该错误意味着事务中发送的查询之一失败,因此其余查询将被忽略,直到当前事务结束(这将自动回滚)。对PostgreSQL来说事务失败了,出错后无论如何都会回滚,只有一个异常(exception)。你必须采取适当的措施,其中之一
- 放弃声明并重新开始。
- 使用SAVEPOINT事务中的 s 能够及时回到那个时间点并尝试另一条路径。 (这是异常(exception))
启用query logging查看哪个查询失败以及原因。
在任何情况下,您的问题的确切答案是任何 SQLException 都应该意味着在发送事务结束命令时发生回滚,即发出 COMMIT 或 ROLLBACK(或 END)时。这就是它的工作原理,如果你使用保存点,你仍然会受到相同规则的约束,你将能够回到你保存的地方并尝试其他东西。
关于postgresql - 事务,什么时候应该被丢弃和回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/195377/