我正在使用带有单个数据库和 4 个表的 HSQLDB。 我正在使用 commons apache 池数据源。
场景如下:
表 1-3 在一个事务中更新,因此在同一连接上(不同的 sql 语句)。他们使用自动提交 false 并调用executeUpdate() 和executeBatch()。在此事务结束时,有时(不是每次)都会调用“检查点”。
表 4 与其他表同时更新,但使用另一个连接。批量更新,然后始终调用“检查点”。在此检查点中,一切都挂起,调用永远不会返回,并且无法访问该数据库中的任何表。在日志文件中,我看到第四个表的“检查点”永远不会到达。
当存在使用 auto commit = false 的打开连接时,我是否无法执行检查点?
可能会陷入僵局吗?
我不知道问题出在哪里... 如果没有这个表#4,一切都可以正常工作。
最佳答案
当有其他打开的连接时,您可以执行 CHECKPOINT。执行 CHECKPOINT 的连接会等待所有其他连接提交,然后再锁定数据库并执行检查点。
因此,您必须在执行检查点之前完成所有操作并提交。
关于java - 同时连接到 HSQLDB - 调用永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503080/