首页 文章

当通过maven liquibase插件填充时,Hsqldb没有数据

提问于
浏览
0

我已经创建了模式并通过Maven liquibase插件填充它:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>2.0.5</version>
    <configuration>
        <propertyFile>src/main/resources/db/config/db.config.properties</propertyFile>
        <changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
    </configuration>
</plugin>

属性文件:

driver: org.hsqldb.jdbcDriver
#HSQLDB Embedded in file
url: jdbc:hsqldb:file:src/main/resources/db/hsqldb/dataFile
username: SA
password:

正如我在调用 mvn liquibase:update 时在输出中看到的:

[INFO] Executing on Database: jdbc:hsqldb:file:src/main/resources/db/hsqldb/dataFile
INFO 24.04.13 10:00:liquibase: Successfully acquired change log lock
INFO 24.04.13 10:00:liquibase: Creating database history table with name: DATABASECHANGELOG
INFO 24.04.13 10:00:liquibase: Reading from DATABASECHANGELOG
INFO 24.04.13 10:00:liquibase: Reading from DATABASECHANGELOG
INFO 24.04.13 10:00:liquibase: ChangeSet src/main/resources/db/changelog/db.changelog-1.0.xml::1::sav ran successfully in 7ms
INFO 24.04.13 10:00:liquibase: ChangeSet src/main/resources/db/changelog/db.changelog-1.0.xml::2::sav ran successfully in 3ms
INFO 24.04.13 10:00:liquibase: Successfully released change log lock
INFO 24.04.13 10:00:liquibase: Successfully released change log lock

db.changelog-master.xml 包含:

<include file="src/main/resources/db/changelog/db.changelog-1.0.xml"/>

db.changelog-1.0.xml 包含:

<changeSet id="1" author="sav">
        <createTable tableName="testTable">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
            <column name="active" type="boolean" defaultValueBoolean="true"/>
        </createTable>
    </changeSet>

    <changeSet id="2" author="sav">
        <insert tableName="testTable">
            <column name="id" value="1"/>
            <column name="name" value="First String"/>
        </insert>
        <insert tableName="testTable">
            <column name="id" value="2"/>
            <column name="name" value="Second String"/>
            <column name="active" value="false"/>
        </insert>
    </changeSet>

似乎一切都好 . 现在我要去 src/main/resources/db/hsqldb/ 文件夹并看到三个文件:

dataFile.log
dataFile.properties
dataFile.script

但我在 dataFile.script 中没有看到 CREATE TABLE testTable DDL语句 . 接下来在Intelli IDEA中配置数据源插件(设置jdbc hsql驱动程序,url: jdbc:hsqldb:file:/src/main/resources/db/hsqldb/dataFile ,user:sa) . 连接它,调用查询:

SELECT * FROM   INFORMATION_SCHEMA.SYSTEM_TABLES;
  • 我看不到我试图创建的表格 .

  • 每个表的hsqldb_type字段的值 - 是MEMORY . 我希望它是类似的文件 .

有任何想法吗?:)

PS:1 . Maven存储库返回 HSQLDB 作为第一个搜索结果,其最后一个版本是1.8.0.10 . 实际上我必须使用 HSQLDB DATABASE 及其2.2.9版本 . 它解决了表创建的问题 . 2.我必须使用文件的绝对路径和';ifexists=true'属性来连接到IDEA数据源插件中的现有数据库 . 因此,我在属性文件中的url连接字符串与插件中使用的字符串不同 .

2 回答

  • 0

    您需要注意文件路径的使用:

    这是一个相对路径:

    driver: org.hsqldb.jdbcDriver
    #HSQLDB Embedded in file
    url: jdbc:hsqldb:file:src/main/resources/db/hsqldb/dataFile
    

    这是当前驱动器中的绝对路径:

    Next in Intelli IDEA I configure datasource plugin (set jdbc hsql driver, url: jdbc:hsqldb:file:/src/main/resources/db/hsqldb/dataFile, user: sa )
    

    尝试使用绝对路径 .

    除此之外,在尝试检查现有数据库中的内容时,通过将 ;ifexists=true 添加到连接URL,明确要求数据库存在 .

    由于我们不确定Liquibase是否正确关闭数据库,因此可以向Liquibase连接URL添加属性以确保数据完全写入 ;hsqldb.write_delay=false . 我们假设您正在使用HSQLDB 2.x来获取此属性 .

  • 1

    对于HSQLDB 1.8.x,liquibase <= 3.2.0从不读取数据库中的表 . 这是因为在检索JDBC元数据时应该设置 catalog null . 我们无法强制目录为null,因为如果 supportCatalogs() 返回false,则方法 AbstractJdbcDatabase.correctSchema() 不应设置 catalog=schema .

    我会为此发布一个问题 .

相关问题