使用DriverManager进行模块化后,如何在jar(只读)中打开HSQLDB资源?

时间:2019-01-08 09:24:35

标签: java hsqldb jigsaw modularization

内部只读数据库存储在其自己的仅资源jar文件中。模块化后,DriverManager无法找到数据库文件,从而导致以下错误消息。

FATAL : 09:13:32 (830) - could not reopen database
org.hsqldb.HsqlException: Database does not exists: /database/prodsoft

我正在使用模块化和Maven将公司的应用程序从使用ANT的JDK8转换为JDK11。它是使用Eclipse开发的。已经解决了许多问题,但是对于这个问题,我自己找不到解决方案。

我已经尝试将数据库文件从其自己的项目移至使用该项目的 Kernel 项目的maven资源文件夹中。 我还尝试 打开 数据库; (资源文件夹)在内核的module-info.java中-项目。

数据库文件 prodsoft.properties prodsoft.script 现在位于

src/main/resources/database/

运行DriverManager的类是

src/main/java/de/benthin/dataaccess/DatabaseReadOnly

已成功找到 hsqldb-2.4.1.jar 驱动程序,并已被DriverManager使用。

// ApplicationProperties.DATABASE_CONNECTION = "jdbc:hsqldb:res:database/prodsoft"

db_con = DriverManager.getConnection(
        properties.getValue(ApplicationProperties.DATABASE_CONNECTION),
        properties.getValue(ApplicationProperties.DATABASE_USER),
        properties.getValue(ApplicationProperties.DATABASE_PASSWORD)
    );

db_con.setAutoCommit(true);
db_con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
db_con.setReadOnly(true);

1 个答案:

答案 0 :(得分:0)

我看过http://hsqldb.org/,其中宣布了将来的2.5版。我认为2.4.1版仅在Java 10之前兼容,但是我没有用Java 9和10测试我的情况。

作为解决方法,我将在程序启动时导出数据库,并在使用后将其删除。 新版本的hsqldb驱动程序可用后,我将更新此问题。