Java hsqldb*.script.new创建和删除

Java hsqldb*.script.new创建和删除,java,sql,linux,jdbc,hsqldb,Java,Sql,Linux,Jdbc,Hsqldb,我有一个以mydata.properties和mydata.script形式的HSQLDB1.8。在mydata.script中,有一些基本SQL语句用于创建模式和填充数据库 当我使用标准Java JDBC调用加载此数据库时,我注意到在文件系统上,似乎发生了以下情况: 正在创建文件mydata.script.new 已删除文件mydata.script mydata.script.new重命名为mydata.script 如何防止mydata.script被删除?这是正常的HSQLDB行为吗 我

我有一个以mydata.properties和mydata.script形式的HSQLDB1.8。在mydata.script中,有一些基本SQL语句用于创建模式和填充数据库

当我使用标准Java JDBC调用加载此数据库时,我注意到在文件系统上,似乎发生了以下情况:

  • 正在创建文件mydata.script.new
  • 已删除文件mydata.script
  • mydata.script.new重命名为mydata.script
  • 如何防止mydata.script被删除?这是正常的HSQLDB行为吗

    我希望mydata.script在文件系统中始终保持(带有时间戳),因为它是只读数据源

    编辑:在附录C中声明这是默认行为。在我的用例中,多个程序(不仅仅是Java)读取这个db。如果某个程序第一次尝试读取.script文件,而该文件正因为另一个程序的首次访问而被删除,则会导致错误


    EDIT2:如果上述方法确实不可行,那么是否有办法将此mydata.script(包含所有SQL调用)转换为某种二进制HSQLDB blob格式,该格式仅通过JDBC加载,未经修改?

    根据您的使用情况,HSQLDB可能不是适合该作业的工具

    听起来您希望从多个应用程序访问进程中的数据库,但HSQLDB不支持这一点。从的“管理数据库连接”部分:

    在所有运行模式下(服务器或进程中),都支持到数据库引擎的多个连接。进程内(独立)模式支持来自同一Java虚拟机中客户端的连接

    因此,如果您希望从单独的进程中获得多个并发连接,您应该在“服务器”模式下使用HSQLDB,但您可能不想为此烦恼

    此外,HSQLDB与Java紧密相连,因此,如果您有希望访问数据的非Java应用程序,那么您的生活可能会比需要的更艰难


    另一种数据库格式,可能是SQLite,可能更适合您。

    我找到了我的问题的答案:HSQLDB.properties文件中有一个
    修改的
    属性,当该属性设置为
    no
    时,将阻止在我的问题中观察到的行为。

    您可以从多个进程同时访问只读HSQLDB数据库。将此行添加到属性文件以使数据库为只读:

    readonly=yes
    

    因此,您希望将此HSQLDB数据库用作多个应用程序的持久只读资源,其中一些应用程序未在Java中实现,这些应用程序可能会尝试同时访问数据库。对吗?对。需要做的是使此只读HSQLDB文件/数据始终存在于文件系统中。