代码之家  ›  专栏  ›  技术社区  ›  Andy

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

  •  0
  • Andy  · 技术社区  · 7 年前

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

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

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

    ALTER SEQUENCE PUBLIC.MYSEQUENCE RESTART WITH 1
    

    这意味着每次重新启动时,MYSEQUENCE都会从1开始,而不管在DML语句外调用了多少次call next值。

    如果mysequence的下一个值作为更新或插入的一部分被调用,那么在db中使用重新启动看起来是正确的。脚本文件。

    我会做错什么?

    (后续:我在Derby中尝试了相同的习惯用法,除了一个小问题,意外的DB关闭将导致序列在之前预分配的值之后启动,而不是在下一个值之后启动,它按预期工作。H2按预期工作)

    1 回复  |  直到 6 年前
        1
  •  3
  •   fredt    6 年前

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