基于文件的 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 不跟踪序列上的调用下一个值的主要内容,如果未能解决你的问题,请参考以下文章