Java 检测由于损坏导致的HSQLDB初始化失败

Java 检测由于损坏导致的HSQLDB初始化失败,java,hsqldb,Java,Hsqldb,启动嵌入式HSQLDB时,有时会记录异常: 2016-11-08 10:35:27 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA dataFileCache open start 2016-11-08 10:35:27 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA dataFileCache open end 2016-11-08 10:35:31 ERROR h.d.H.ENGINE

启动嵌入式HSQLDB时,有时会记录异常:

2016-11-08 10:35:27 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA dataFileCache open start
2016-11-08 10:35:27 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA dataFileCache open end
2016-11-08 10:35:31 ERROR h.d.H.ENGINE user:NA company:NA remotehost:NA statement error processing log /home/jetty/test/testdb/test.dbline: 87137
org.hsqldb.HsqlException: user lacks privilege or object not found: PUBLIC.FROM
        at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.SchemaManager.getUserTable(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.scriptio.ScriptReaderText.processStatement(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.scriptio.ScriptReaderText.readLoggedStatement(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.persist.ScriptRunner.runScript(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.persist.ScriptRunner.runScript(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.persist.Log.processLog(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.persist.Log.open(Unknown Source) ~[hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.persist.Logger.openPersistence(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.Database.reopen(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.Database.open(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.DatabaseManager.getDatabase(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.DatabaseManager.newSession(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) [hsqldb-2.2.7.jar:2.2.7]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:95) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:101) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:314) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:171) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:436) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.pool.HikariPool.access$500(HikariPool.java:65) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:567) [HikariCP-2.4.3.jar:na]
        at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:560) [HikariCP-2.4.3.jar:na]
        at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.7.0_51]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_51]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_51]
        at java.lang.Thread.run(Unknown Source) [na:1.7.0_51]
2016-11-08 10:35:31 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA checkpointClose start
2016-11-08 10:35:31 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA dataFileCache commit start
2016-11-08 10:35:31 INFO h.d.H.ENGINE user:NA company:NA remotehost:NA checkpointClose end
2016-11-08 10:35:32 INFO c.x.p.d.u.DataSourceFactory user:NA company:NA remotehost:NA Database connection is OK!
2016-11-08 10:35:32 INFO c.x.p.d.u.DataSourceFactory user:NA company:NA remotehost:NA Initialising data source: Liquibase
2016-11-08 10:35:32 INFO c.x.p.d.u.DataSourceFactory user:NA company:NA remotehost:NA HSQLDB used
2016-11-08 10:35:27信息h.d.h.引擎用户:NA公司:NA远程主机:NA数据文件缓存打开启动
2016-11-08 10:35:27信息h.d.h.引擎用户:NA公司:NA远程主机:NA数据文件缓存开放端
2016-11-08 10:35:31错误h.d.h.引擎用户:NA公司:NA远程主机:NA语句错误处理日志/主页/码头/测试/测试数据库/测试数据库:87137
org.hsqldb.hsqldb异常:用户缺少权限或找不到对象:PUBLIC.FROM
在org.hsqldb.error.error.error(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.error.error.error(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.SchemaManager.getUserTable(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.scriptio.ScriptReaderText.processStatement(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.scriptio.ScriptReaderText.readLoggedStatement(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.persist.ScriptRunner.runScript(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.persist.ScriptRunner.runScript(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.persist.Log.processLog(未知源)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.persist.Log.open(未知源代码)~[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.persist.Logger.openPersistence(未知源)[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.Database.reopen(未知源)[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.Database.open(未知源代码)[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.DatabaseManager.getDatabase(未知源)[hsqldb-2.2.7.jar:2.2.7]
在org.hsqldb.DatabaseManager.newSession(未知源)[hsqldb-2.2.7.jar:2.2.7]
位于org.hsqldb.jdbc.JDBCConnection.(未知源)[hsqldb-2.2.7.jar:2.2.7]
位于org.hsqldb.jdbc.jdbdriver.getConnection(未知源)[hsqldb-2.2.7.jar:2.2.7]
位于org.hsqldb.jdbc.jdbdriver.connect(未知源)[hsqldb-2.2.7.jar:2.2.7]
在com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:95)[HikariCP-2.4.3.jar:na]
在com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:101)[HikariCP-2.4.3.jar:na]
在com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:314)[HikariCP-2.4.3.jar:na]
在com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:171)[HikariCP-2.4.3.jar:na]
在com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:436)[HikariCP-2.4.3.jar:na]
访问com.zaxxer.hikari.pool.HikariPool.access$500(HikariPool.java:65)[HikariCP-2.4.3.jar:na]
在com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:567)[hikaripol-2.4.3.jar:na]
在com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:560)[hikaripol-2.4.3.jar:na]
在java.util.concurrent.FutureTask.run(未知源代码)[na:1.7.0_51]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)[na:1.7.0_51]
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)[na:1.7.0_51]
在java.lang.Thread.run(未知源代码)[na:1.7.0_51]
2016-11-08 10:35:31信息h.d.h.引擎用户:NA公司:NA远程主机:NA检查点关闭启动
2016-11-08 10:35:31信息h.d.h.引擎用户:NA公司:NA远程主机:NA数据文件缓存提交启动
2016-11-08 10:35:31信息h.d.h.引擎用户:NA公司:NA远程主机:NA检查点结束
2016-11-08 10:35:32信息c.x.p.d.u.数据源工厂用户:NA公司:NA远程主机:NA数据库连接正常!
2016-11-08 10:35:32信息c.x.p.d.u.数据源工厂用户:NA公司:NA远程主机:NA初始化数据源:Liquibase
2016-11-08 10:35:32信息c.x.p.d.u.数据源工厂用户:NA公司:NA远程主机:已使用NA HSQLDB
HSQLDB似乎接受了这些异常。
这会导致java代码继续运行,即使数据库可能已损坏

是否有方法捕获这些异常?

或Java API调用以验证数据库是否正确启动?

异常消息:

org.hsqldb.HsqlException: user lacks privilege or object not found: PUBLIC.FROM
表示在数据库的.log文件中有对.log文件第87137行中名为
的表的引用。由于无法从中调用表,因此它显示有一个损坏的行

当数据库未正确关闭且.log文件的最后几行未同步到磁盘时,可能会发生这种情况。引擎将从该点忽略.log文件条目

您可以选择向连接属性添加
hsqldb.full\u log\u replay=true
,以引发异常并中止连接尝试。然后,您可以查看和编辑.log文件以删除损坏的行。
如果想

可以将代码发布到访问数据库的位置吗?由于持久性问题,2.2.7版很快被2.2.8版取代。如果不是最新版本,至少切换到该版本。@javaguy我们还没有查询数据库。这在初始化HSQLDB时发生。HSQLDB是通过Hikari初始化的:
hikariConnPool.setDriverClassName(org.HSQLDB.jdbcDriver.class.getName());setJdbcUrl(“jdbc:hsqldb:+Configuration.databasePath”)
@fredt除了碰撞版本外,是否有一种方法可以在被抛出时检测此类异常连接失败时抛出此类异常,并且是致命的。如果不是致命的,它就会成功。