嵌入 HSQLDB 的应用程序打包后没有数据
NO data after packaging application with HSQLDB embded
在使用嵌入式 HSQLDB(带休眠)的 java 桌面应用程序工作一个月后,当我将它打包到 jar 文件时,HSQLDB 似乎根本没有数据。
我检查了 ismdb.script 存在于 jar 中并且它包含数据。
结构如下(HSQLDB数据在DATA文件夹中)
MyProjet
|___Main.java
|___resources
|____DATA
这是我的 hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:hsqldb:res:./data/ismdb</property>
<property name="connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>
<property name="hibernate.search.default.directory_provider">filesystem</property>
<property name="hibernate.search.default.indexBase">./data/</property>
<property name="hbm2ddl.auto">update</property>
<property name="connection.username">root</property>
<property name="connection.password">psw</property>
<mapping class="com.storeengine.model.Categories"/>
<mapping class="com.storeengine.model.Product"/>
<mapping class="com.storeengine.model.Row"/>
<mapping class="com.storeengine.model.Store"/>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
当我在 table 上尝试 SELECT 时,我得到 java.lang.NullPointerException。
我尝试了各种路径,唯一可行的情况是当我将数据库路径设置为项目的实际 DATA 文件夹时,但当然我不能将软件与源代码一起发布。我需要一个包含所有内容的 JAR。
请帮忙,我真的卡住了。
谢谢
所以我找到了解决方案。从我了解到的情况来看,似乎不可能将 hsqldb 100% 嵌入到同一个 jar 中。您需要将数据文件夹放在项目之外。
在我的例子中,我发现 hsqldb(或 hibernate)正在用我指定的路径(./data/ismdb)在机器根文件夹中创建空文件夹,我所要做的就是复制内容从我的项目到创建的文件夹的数据文件夹和 voilà。
在使用嵌入式 HSQLDB(带休眠)的 java 桌面应用程序工作一个月后,当我将它打包到 jar 文件时,HSQLDB 似乎根本没有数据。
我检查了 ismdb.script 存在于 jar 中并且它包含数据。
结构如下(HSQLDB数据在DATA文件夹中)
MyProjet
|___Main.java
|___resources
|____DATA
这是我的 hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:hsqldb:res:./data/ismdb</property>
<property name="connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>
<property name="hibernate.search.default.directory_provider">filesystem</property>
<property name="hibernate.search.default.indexBase">./data/</property>
<property name="hbm2ddl.auto">update</property>
<property name="connection.username">root</property>
<property name="connection.password">psw</property>
<mapping class="com.storeengine.model.Categories"/>
<mapping class="com.storeengine.model.Product"/>
<mapping class="com.storeengine.model.Row"/>
<mapping class="com.storeengine.model.Store"/>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
当我在 table 上尝试 SELECT 时,我得到 java.lang.NullPointerException。
我尝试了各种路径,唯一可行的情况是当我将数据库路径设置为项目的实际 DATA 文件夹时,但当然我不能将软件与源代码一起发布。我需要一个包含所有内容的 JAR。
请帮忙,我真的卡住了。 谢谢
所以我找到了解决方案。从我了解到的情况来看,似乎不可能将 hsqldb 100% 嵌入到同一个 jar 中。您需要将数据文件夹放在项目之外。
在我的例子中,我发现 hsqldb(或 hibernate)正在用我指定的路径(./data/ismdb)在机器根文件夹中创建空文件夹,我所要做的就是复制内容从我的项目到创建的文件夹的数据文件夹和 voilà。