我正在研究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))
Run Code Online (Sandbox Code Playgroud)
来自myDB.properties:
version=2.2.4
modified=no
Run Code Online (Sandbox Code Playgroud)
我以为我使用的是文件 db而不是内存db.
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();
Run Code Online (Sandbox Code Playgroud)
如果您使用file:数据库,HSQLDB应该为您的数据库创建.script并且.properties(.log如果出现意外关闭),并且如果关闭应用程序,则不会删除这些文件.该.script文件应具有重新填充数据所需的所有INSERT语句.
如果使用mem:数据库,则根本不会写入文件,并且不会在实例之间保存数据.从指南:
由于没有信息写入磁盘,因此该模式仅应用于applet或某些特殊应用程序中的应用程序数据的内部处理.此模式由mem:protocol指定.
文件存在并在应用程序重新启动之间保留的事实本身就是您正在寻找的"文件"数据库.
编辑:
要回答你的评论,
但在这种情况下,手册中提到了*.data文件
从指南:
此文件仅包含CACHED表的(二进制)数据记录.
有关CACHED与MEMORY表的信息,请参阅horse的答案.关于您何时使用CACHED表的问题,这是指南中的另一个片段:
只有部分数据或索引保存在内存中,允许大型表,否则将占用数百兆字节的内存.缓存表的另一个优点是,当缓存表用于大量数据时,数据库引擎启动时间较短.缓存表的缺点是速度降低.如果数据集相对较小,请不要使用缓存表.在具有一些小表和一些大表的应用程序中,最好对小表使用默认的MEMORY模式.