hsqldb *.script.new 创建和删除
hsqldb *.script.new creating and deletion
我有一个 HSQLDB 1.8,格式为 mydata.properties 和 mydata.script。在 mydata.script 中,有一些基本的 SQL 语句来创建模式和填充数据库。
当我使用标准 Java JDBC 调用加载此数据库时,我注意到在文件系统上,似乎发生了以下情况:
- 正在创建文件 mydata.script.new。
- 文件mydata.script被删除。
- mydata.script.new 更名为 mydata.script
如何防止 mydata.script 被删除?这是正常的 HSQLDB 行为吗?
我希望 mydata.script 始终在文件系统中保留(带有时间戳),它是一个只读数据源。
编辑:manual 确实声明这是附录 C 中的默认行为。在我的用例中,多个程序(不仅是 Java)读取此数据库。如果程序第一次尝试读取 .script 文件,而恰好由于另一个程序的第一次访问而正在删除它,则会导致错误。
EDIT2:如果以上确实不可能,是否没有办法将此 mydata.script(包含所有 SQL 调用)转换为某种二进制 HSQLDB blob 格式刚刚通过 JDBC 加载且未修改?
根据您的使用案例,HSQLDB 可能不是完成这项工作的正确工具。
听起来您想从多个应用程序进程中访问数据库,但 HSQLDB 不支持。来自 Deployment Guide 的 "Managing Database Connections" 部分:
In all running modes (server or in-process) multiple connections to the database engine are supported. in-process (standalone) mode supports connections from the client in the same Java Virtual Machine,
因此,如果您想要来自不同进程的多个并发连接,您应该在 "server" 模式下使用 HSQLDB,但您可能不想为此烦恼。
此外,HSQLDB 与 Java 紧密绑定,因此如果您有非 Java 应用程序想要访问数据,您可能会让您的生活变得更加艰难。
另一种数据库格式,可能是 SQLite,可能更适合您。
我找到了我的问题的答案:有一个 modified
属性,当在 HSQLDB .properties 文件中设置为 no
时,将阻止我的问题中观察到的行为。
您可以从多个进程同时访问一个只读的 HSQLDB 数据库。将此行添加到属性文件以使数据库只读:
readonly=yes
我有一个 HSQLDB 1.8,格式为 mydata.properties 和 mydata.script。在 mydata.script 中,有一些基本的 SQL 语句来创建模式和填充数据库。
当我使用标准 Java JDBC 调用加载此数据库时,我注意到在文件系统上,似乎发生了以下情况:
- 正在创建文件 mydata.script.new。
- 文件mydata.script被删除。
- mydata.script.new 更名为 mydata.script
如何防止 mydata.script 被删除?这是正常的 HSQLDB 行为吗?
我希望 mydata.script 始终在文件系统中保留(带有时间戳),它是一个只读数据源。
编辑:manual 确实声明这是附录 C 中的默认行为。在我的用例中,多个程序(不仅是 Java)读取此数据库。如果程序第一次尝试读取 .script 文件,而恰好由于另一个程序的第一次访问而正在删除它,则会导致错误。
EDIT2:如果以上确实不可能,是否没有办法将此 mydata.script(包含所有 SQL 调用)转换为某种二进制 HSQLDB blob 格式刚刚通过 JDBC 加载且未修改?
根据您的使用案例,HSQLDB 可能不是完成这项工作的正确工具。
听起来您想从多个应用程序进程中访问数据库,但 HSQLDB 不支持。来自 Deployment Guide 的 "Managing Database Connections" 部分:
In all running modes (server or in-process) multiple connections to the database engine are supported. in-process (standalone) mode supports connections from the client in the same Java Virtual Machine,
因此,如果您想要来自不同进程的多个并发连接,您应该在 "server" 模式下使用 HSQLDB,但您可能不想为此烦恼。
此外,HSQLDB 与 Java 紧密绑定,因此如果您有非 Java 应用程序想要访问数据,您可能会让您的生活变得更加艰难。
另一种数据库格式,可能是 SQLite,可能更适合您。
我找到了我的问题的答案:有一个 modified
属性,当在 HSQLDB .properties 文件中设置为 no
时,将阻止我的问题中观察到的行为。
您可以从多个进程同时访问一个只读的 HSQLDB 数据库。将此行添加到属性文件以使数据库只读:
readonly=yes