在Checkpoint期间,HSQLDB在db.script.new文件上抛出Asset failed异常和文件io错误

时间:2015-11-17 11:35:08

标签: hsqldb hypersql

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

答案 0 :(得分:0)

这是一个7岁的版本,不适合多线程使用。

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