hsqldb *.script.new 创建和删除
Posted
技术标签:
【中文标题】hsqldb *.script.new 创建和删除【英文标题】:hsqldb *.script.new creating and deletion 【发布时间】:2015-10-06 15:37:39 【问题描述】:我有一个 mydata.properties 和 mydata.script 形式的 HSQLDB 1.8。在 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 数据库用作多个应用程序的持久只读资源,其中一些应用程序未用 Java 实现,它们可能会尝试同时访问数据库。对吗? 没错。需要的是让这个只读 HSQLDB 文件/数据始终简单地存在于文件系统中。 【参考方案1】:根据您的使用案例,HSQLDB 可能不是适合这项工作的工具。
听起来您想从多个应用程序访问数据库in-process,但 HSQLDB 不支持。来自Deployment Guide 的“管理数据库连接”部分:
在所有运行模式(服务器或进程内)中,都支持与数据库引擎的多个连接。 in-process(独立)模式支持来自同一 Java 虚拟机中客户端的连接,
因此,如果您想要来自不同进程的多个并发连接,您应该在“服务器”模式下使用 HSQLDB,但您可能不想为此烦恼。
此外,HSQLDB 与 Java 紧密相关,因此如果您有非 Java 应用程序想要访问数据,您可能会让您的生活变得比实际需要的更加艰难。
另一种数据库格式,可能是 SQLite,可能更适合您。
【讨论】:
【参考方案2】:您可以从多个进程同时访问只读 HSQLDB 数据库。将此行添加到属性文件以使数据库为只读:
readonly=yes
【讨论】:
【参考方案3】:我找到了问题的答案:有一个 modified
属性,当在 HSQLDB .properties 文件中设置为 no
时,将阻止我的问题中观察到的行为。
【讨论】:
以上是关于hsqldb *.script.new 创建和删除的主要内容,如果未能解决你的问题,请参考以下文章