hsqldb忽略服务器上表的第一次插入操作(服务器需要“预热”?)

时间:2011-03-28 09:03:38

标签: hsqldb

我们对hsqldb有一个非常奇怪的问题。我们正在运行一些在MySQL上运行良好的测试,但我们最近切换到hsqldb进行单元测试。在这样做时,我们注意到我们的一些测试开始失败。其中一个测试插入三个记录A,B和C,并尝试检索前两个A和B.然而,在我们第一次在新配置的(空)数据库上运行测试时,只返回B.但是,如果我们在同一个数据库上重复测试,则返回A'和B'(在您询问之前,是A,B和C与A',B'和C'不同)。

我们试图强制数据库保留记录,我们已插入延迟。没有什么似乎有帮助,除了用单个插入“预热数据库”。如果我们之后检查hsqldb日志,它们包含所有insert语句,甚至是我们在数据库上第一次运行时无法使用SELECT检索的语句。

有没有人遇到过hsqldb需要使用虚拟插入语句“预热”的问题?如果我们在运行测试之前执行带有垃圾的insert语句,它们也将成功完成。

我们已经在hsqldb 2.0.0和2.1.0上进行了测试。两个版本都会产生相同的结果。

2 个答案:

答案 0 :(得分:2)

OP在其中一条评论中给出了真正的答案。 HSQLDB不会忽略第一个插入。默认情况下,HSQLDB和MySQL分别使用0和1作为表中标识列生成的第一个自动增量值。 OP的查询假设第一个值是MySQL值(1)。

使用HSQLDB,GENERATED BY DEFAULT AS IDENTITY START WITH 1可用于定义自动增量列以匹配MySQL默认值。

答案 1 :(得分:1)

我从未使用过hsqldb,但您是否尝过INSERT INTO ...; COMMIT;然后运行SELECT ..

数据库操作(INSERT,UPDATE或DELETE)被延迟是不合理的。当数据库没有处于高负荷状态但你不能指望它时,它可能不应该发生。