HSQLDB 在检查点期间在 db.script.new 文件上抛出 Asset failed 异常和文件 io 错误
Posted
技术标签:
【中文标题】HSQLDB 在检查点期间在 db.script.new 文件上抛出 Asset failed 异常和文件 io 错误【英文标题】:HSQLDB throws Asset failed exception and file io error on db.script.new file during Checkpoint 【发布时间】:2015-11-17 11:35:07 【问题描述】:我们的应用程序是一个基于 Java 的桌面应用程序,它将从源下载二进制数据,对其进行解析并将其添加到 HSQLDB 数据库中。从源单独下载时,应用程序可以完美运行。但是,当从多个源同时对单个线程中的每个源执行相同操作时,我收到了
的错误java.sql.SQLException: Assert failed: java.lang.ArrayIndexOutOfBoundsException: 23 in statement [CHECKPOINT]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.execute(Unknown Source)
有时,
java.sql.SQLException: Assert failed: java.lang.ArrayIndexOutOfBoundsException: 1016 in statement [CHECKPOINT]
紧随其后
java.sql.SQLException: File input/output error: C:\ProgramData\test\data\database\db.script.new in statement [CHECKPOINT]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.execute(Unknown Source)
Java:1.8; HSQL版本:1.8.10
由于各种原因,我们无法将 HSQLDB 迁移到最新版本。
HSQL 属性:
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=false
hsqldb.cache_size_scale=8
readonly=false
hsqldb.nio_data_file=true
hsqldb.cache_scale=14
version=1.8.0
hsqldb.default_table_type=memory
hsqldb.cache_file_scale=1
hsqldb.log_size=200
modified=yes
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.compatible_version=1.8.0
任何帮助或提示将不胜感激。
【问题讨论】:
【参考方案1】:这是一个 7 年前的版本,不适合多线程使用。
简单的解决方案是使用单个线程执行数据库更新。您可以在执行数据库更新的代码周围的单例对象上使用 synchronized
块来改进您的多线程应用程序。
【讨论】:
以上是关于HSQLDB 在检查点期间在 db.script.new 文件上抛出 Asset failed 异常和文件 io 错误的主要内容,如果未能解决你的问题,请参考以下文章