数据未保存在HSQL的MEMORY表中

时间:2011-09-13 06:39:33

标签: hsqldb

我在HSQL中创建了一个MEMORY表。但是只有在运行我的Java应用程序时才会保存和访问数据。在HSql FAQ中他们说,

...the default, MEMORY tables are persistent.

程序存在后,数据不会持久。这有什么问题?

SQL:

CREATE MEMORY TABLE SESSIONS(
    SESSION_DATE DATE NOT NULL,
    IN_TIME TIMESTAMP NOT NULL,
    OUT_TIME TIMESTAMP NOT NULL)

Java:

DriverManager.getConnection("jdbc:hsqldb:file:"+
    DbConnection.class.getResource("/loginTimerDB").getPath()+"/loginTimerDB",
    "SA",
    "");

我已将此数据库文件放在java包中,以便在部署时生成一个简单的jar文件。

确定。起初我对jar文件中包装数据库有同样的想法。所以我把那个hsql数据库文件夹移到了源包的外面。而且,我已经改变了如下的java代码,

"jdbc:hsqldb:file:loginTimerDB/loginTimerDB"

我以前使用过hsql db,从来没有遇到这样的问题。

2 个答案:

答案 0 :(得分:1)

当您将数据库放入jar中时,它将变为只读。

在部署中,您可以在访问数据库之前将数据库解压缩到具有读/写权限的单独目录中。

答案 1 :(得分:1)

您是否在应用程序退出之前关闭了数据库?关于Hsqldb User Guide, Closing the Database,您必须通过JDBC连接发送SHUTDOWN命令

connection.prepareStatement("SHUTDOWN").execute();

或在连接字符串中设置shutdown=true属性:

jdbc:hsqldb:file:loginTimerDB/loginTimerDB;shutdown=true