小编典典

关于数据保存的HSQL问题

sql

我正在研究HSQL(嵌入到应用程序中),并期望将数据保存在文件系统中的myDB.data文件中,
而在进行干净关闭(执行sql“
shutdown”,停止并关闭服务器对象)之后,唯一其余文件是myDB.properties和myDB.script,而myDB.script具有所有命令来重新创建内存中的数据。不存在myDB.data文件,
例如,来自myDB.script的文件

CREATE MEMORY TABLE PUBLIC.DUMMYTABLE(ID INTEGER PRIMARY KEY,FIRSTNAME VARCHAR(20))

从myDB.properties:

version=2.2.4
modified=no

我以为我正在使用 文件 数据库,而不是内存数据库。

Class.forName("org.hsqldb.jdbc.JDBCDriver");

HsqlProperties p = new HsqlProperties();  
p.setProperty("server.database.0", "file:./testDB");  
p.setProperty("server.dbname.0","myDB");  
p.setProperty("server.address","localhost");  
Server server = new Server(); server.setProperties(p);  
server.start();  
Connection connection = DriverManager.getConnection"jdbc:hsqldb:hsql://localhost:9001/myDB", "SA", "");    
PreparedStatement st = connection.prepareStatement("CREATE TABLE dummyTable (id INTEGER PRIMARY KEY, firstname VARCHAR(20))");    
st.executeUpdate();   
connection.prepareStatement("shutdown").execute();  
connection.close();  
server.stop();  
server.shutdown();

阅读 179

收藏
2021-04-22

共1个答案

小编典典

如果使用file:数据库,则HSQLDB应该为数据库创建,.script并且.properties.log如果可能发生意外关闭,则可能会关闭),并且如果应用程序关闭,则不会删除这些文件。该.script文件应具有重新填充数据所需的所有INSERT语句。

如果使用mem:数据库,则将根本不会写入文件,也不会在实例之间保存数据。从指南

由于没有信息写入磁盘,因此该模式仅应用于小程序或某些特殊应用程序中的应用程序数据的内部处理。此模式由mem:协议指定。

文件存在并在应用程序重新启动之间保留的事实本身就是您要查找的“文件”数据库。

编辑:

为了回答您的评论,

但是在这种情况下,手册中提到的是* .data文件

指南

该文件仅包含CACHED表的(二进制)数据记录。

有关CACHED与MEMORY表的信息,请参阅马的答案。关于您何时使用CACHED表的问题,这是指南中的另一段代码

它们的数据或索引的仅一部分保留在内存中,从而允许大型表占用多达数百兆的内存。高速缓存的表的另一个优点是,当高速缓存的表用于大量数据时,数据库引擎需要较少的时间来启动。缓存表的缺点是速度降低。如果您的数据集相对较小,请不要使用缓存的表。在具有一些小表和一些大表的应用程序中,最好对小表使用默认的MEMORY模式。

2021-04-22