我已经创建了架构并通过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
但我在CREATE TABLE testTable
中没有看到dataFile.script
DDL语句。
接下来在Intelli IDEA中我配置数据源插件(设置jdbc hsql驱动程序,url:jdbc:hsqldb:file:/src/main/resources/db/hsqldb/dataFile
,user:sa)。连接它,调用查询:
SELECT * FROM INFORMATION_SCHEMA.SYSTEM_TABLES;
任何想法?:)
PS: 1. Maven存储库返回 HSQLDB 作为第一个搜索结果,其最后一个版本是1.8.0.10。实际上我必须使用 HSQLDB DATABASE 及其2.2.9版本。它解决了表创建的问题。 2.我必须使用文件的绝对路径和'; ifexists = true'属性来连接到IDEA数据源插件中的现有数据库。因此,我在属性文件中的url连接字符串与插件中使用的字符串不同。
答案 0 :(得分:1)
您需要注意文件路径的使用:
这是一条相对路径:
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 :(得分:0)
对于HSQLDB 1.8.x,liquibase&lt; = 3.2.0从不读取数据库中的表。
这是因为在检索JDBC元数据时应将catalog
设置为null
。
我们无法强制目录为空,因为如果AbstractJdbcDatabase.correctSchema()
返回false,方法catalog=schema
不应设置supportCatalogs()
。
我会为此发布一个问题。