基于文件的 HSQLDB 不跟踪序列上的调用下一个值

Posted

技术标签:

【中文标题】基于文件的 HSQLDB 不跟踪序列上的调用下一个值【英文标题】:File-based HSQLDB does not track call next value on sequence 【发布时间】:2018-01-29 11:32:11 【问题描述】:

如果我有一个基于文件的 HSQLDB 实例,并且我尝试将一些原始序列值放入我的 java 代码中:

JdbcTemplate(dataSource).queryForObject("call next value for mysequence", int.class)

然后当我重新启动数据库时,我在 db.script 中看到以下行:

ALTER SEQUENCE PUBLIC.MYSEQUENCE RESTART WITH 1

这意味着每次我重新启动时,MYSEQUENCE 都会从 1 重新开始,无论在 DML 语句之外调用下一个值多少次。

如果 mysequence 的下一个值作为更新或插入的一部分被调用,则 RESTART WITH 在 db.script 文件中看起来是正确的。

我做错了什么?

(跟进:我在 Derby 中尝试过相同的习语,除了一个小问题,即意外的数据库关闭将导致序列在先前预分配的值之后开始,而不是下一个值之后,它可以工作正如预期的那样。H2 按预期工作)

【问题讨论】:

【参考方案1】:

您应该执行SHUTDOWN 语句来关闭数据库。这应该保持序列值。

【讨论】:

非常感谢 fredt,我会将您的答案标记为已接受。附带说明一下,如果进程被终止,那么数据库将处于错误状态。

以上是关于基于文件的 HSQLDB 不跟踪序列上的调用下一个值的主要内容,如果未能解决你的问题,请参考以下文章

文件模式下的HSQLDB不保存?

HSQLDB 2.3.3:如何为序列返回下一个值的数组

无法从 hsqldb 日志文件恢复

我的 HSQLDB 上的更改不一致

HSQLDB:内存表和数据丢失

hsqldb java的profiling示例程序