我在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,从来没有遇到这样的问题。
答案 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