基于文件的 HSQLDB 不跟踪序列上的调用下一个值
File-based HSQLDB does not track call next value on sequence
如果我有一个基于文件的 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 按预期工作)
您应该执行SHUTDOWN
语句来关闭数据库。这应该保留序列值。
如果我有一个基于文件的 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 按预期工作)
您应该执行SHUTDOWN
语句来关闭数据库。这应该保留序列值。