在使用嵌入式HSQLDB(带有hibernate)的java桌面应用程序上工作了一个月后,我将它打包到一个jar文件中,HSQLDB似乎根本没有数据。
我检查了jar中存在的ismdb.script,它包含数据。
这是结构(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>
当我在表上尝试SELECT时,我得到java.lang.NullPointerException。
我尝试了所有类型的路径,唯一可行的情况是当我将数据库路径设置为项目实际DATA文件夹时,但当然我无法发送带有源代码的软件。我需要一个包含其中所有内容的JAR。
请帮助,我真的被卡住了。 感谢
答案 0 :(得分:0)
所以我找到了解决方案。从我学到的东西看来,hsqldb在同一个罐子里100%嵌入是不可能的。您需要将数据文件夹放在项目之外。
在我的情况下,我发现hsqldb(或hibernate)在机器根文件夹中创建了带有spicified(./data/ismdb)路径的空文件夹,我所要做的就是复制数据文件夹的内容从我的项目到创建的文件夹和voilà。