在检查点期间,HSQLDB在db.script.new文件上引发Asset failed异常和file io错误



我们的应用程序是一个基于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:ProgramDatatestdatadatabasedb.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

如有任何帮助或提示,我们将不胜感激。

这是一个有7年历史的版本,不适合多线程使用。

简单的解决方案是使用单个线程执行数据库更新。您可以在执行数据库更新的代码周围的单个对象上使用synchronized块来改造多线程应用程序。

相关内容

  • 没有找到相关文章

最新更新