【发布时间】:2014-02-03 08:56:19
【问题描述】:
早安
我想在 ant 构建期间生成数据库文档。因此,我启动 HSLQDB(2.3.0 版)并从单元测试期间生成的转储中对其进行初始化。我是这样做的:
<property name="database.name" value="testdb" />
<property name="database.url.cache" value="jdbc:hsqldb:hsql://localhost:9001/testdb;sql.syntax_ora=true" />
<echo message="- hsqldb initialize -" />
<java classname="org.hsqldb.Server" fork="true" spawn="true" classpathref="db.classpath">
<arg value="-database.0"/>
<arg value="file:${database.dir}/${database.name}"/>
<arg value="-dbname.0"/>
<arg value="${database.name}"/>
<arg value="-port"/>
<arg value="9001"/>
</java>
<property name="jdbc.driver" value="org.hsqldb.jdbcDriver" />
<property name="database.username" value="sa" />
<property name="database.password" value="" />
<sql
classpathref="db.classpath"
driver="${jdbc.driver}"
url="${database.url.cache}"
userid="${database.username}" password="${database.password}"
autocommit="true">
SET DATABASE SQL SYNTAX ORA TRUE;
</sql>
只要在本地运行,它就可以完美运行。但是在构建服务器上,我不允许打开任何端口(也不能执行任何可能挂起并弄乱后续构建的 jar)。因此我想通过设置来启动 HSQLDB inmemory
-address jdbc:hsqldb:mem:testdb
当然这会杀死架构,因为文件被忽略了。但是当我将任何表插入内存数据库时:
<sql
classpathref="db.classpath"
driver="${jdbc.driver}"
url="${database.url.cache}"
userid="${database.username}" password="${database.password}"
autocommit="true" src="anydir/anyfile.sql">
</sql>
anyfile.sql:
CREATE TABLE test (ID DECIMAL(19) NOT NULL PRIMARY KEY, TESTME VARCHAR2(255));
...什么也没发生。当我查询数据库时没有可用的表:
<sql
classpathref="db.classpath"
driver="${jdbc.driver}"
url="${database.url.cache}"
userid="${database.username}" password="${database.password}"
autocommit="true">
SCRIPT 'anydir/hsqldb.dump';
</sql>
模式 PUBLIC 中根本没有表,这意味着它是一个新数据库...
我做错了什么?我已经尝试过here 中提到的参数(例如shutdown=true)。
谢谢
【问题讨论】: