同时连接到 HSQLDB - 调用永远不会返回

Posted

技术标签:

【中文标题】同时连接到 HSQLDB - 调用永远不会返回【英文标题】:Simultaneous connection to HSQLDB - the call never returns 【发布时间】:2013-08-29 05:39:46 【问题描述】:

我将 HSQLDB 与单个 DB 和 4 个表一起使用。 我正在使用 commons apache pooled 数据源。

场景如下:

表 1-3 在一个事务中更新,因此在同一个连接上(不同的 sql 语句)。他们使用自动提交 false 并调用 executeUpdate() 和 executeBatch()。在此事务结束时,有时(不是每次)都会调用“检查点”。

表 4 与其他表同时更新,但使用另一个连接。更新批次,然后总是调用“检查点”。在这个检查点,一切都挂起,调用永远不会返回,并且无法访问该数据库中的任何表。在日志文件中,我看到第 4 个表的“检查点”永远不会到达。

当有一个使用 auto commit = false 的打开连接时,我无法执行检查点吗?

可能是死锁?

我不知道是什么问题... 没有这张表 #4 一切正常。

【问题讨论】:

当你省略“检查点”时会发生什么(无论如何都不需要) 没有它,其余代码似乎都在工作,我必须添加检查点,因为我希望将其插入数据库,而不是缓存。 HSQLDB 会在需要时将数据刷新到磁盘。只要确保你SHUTDOWN引擎正确。 它需要一段时间才能刷新,我可能会丢失数据。出于性能原因,我不使用日志。 【参考方案1】:

您可以在有其他打开的连接时执行 CHECKPOINT。执行 CHECKPOINT 的连接在锁定数据库并执行检查点之前等待所有其他连接提交。

因此您必须在执行检查点之前完成所有操作并提交。

【讨论】:

谢谢。看来如果把这些操作分成2个线程,就可以避免这个问题了。

以上是关于同时连接到 HSQLDB - 调用永远不会返回的主要内容,如果未能解决你的问题,请参考以下文章

如何连接到独立的 HSQLDB

xmppStreamDidConnect 永远不会在 Swift 中被调用

不要连接到 HSQLDB 数据库

连接到 IDE 中现有的 hsqldb 实例

通过 Windows ODBC PostgreSQL 驱动程序连接到 HSQLDB 2.5

连接到 Play 应用程序中嵌入的 HSQLDB 数据库