SimpleJdbcTemplate进行. - 插入和检索ID

Seb*_*ian 6 java spring integration-testing unit-testing jdbctemplate

我用simpleJdbcTemplate将数据放入数据库.

simpleJdbcTemplate.update("insert into TABLE values(default)");
Run Code Online (Sandbox Code Playgroud)

我不想放任何数据,因为我不需要它用于我的单元测试目的.

如何从插入的行中获取id?我可以检索当前序列值,但如果其他人将执行插入,那么我将获得下一个序列值.

有没有办法使用simpleJdbcTemplate插入行并获取id?更新方法返回插入的行数,我想拥有id.谢谢您的帮助.

Geo*_*rge 5

你找到答案了吗?如果没有,请尝试使用SimpleJdbcInsert.例如:

SimpleJdbcInsert sji = new SimpleJdbcInsert(dataSource)
    .withTableName(TableName)
    .usingColumns(new String[]{your columns})
    .usingGeneratedKeyColumns(you auto-increment id colums);
Run Code Online (Sandbox Code Playgroud)

然后检索

sji.executeAndReturnKey(args).longValue();
Run Code Online (Sandbox Code Playgroud)


Ade*_*ari 1

id您应该首先从适当的查询sequence,然后id在插入语句中提供它。就如此容易。

此外,我们可以将其称为集成测试,而不是单元测试。您可能想参考此 SO 线程来了解有关集成测试和 id 的想法。

[评论后编辑]

在这种情况下,请摆脱该触发器。并id在创建.sequenceinsert

好吧,您可以SELECT... FOR UPDATE在表上触发 a ,并获取最后一个id,然后将其增加 1。如果您的id不是连续的(我想情况并非如此),您可以保留ROWID, 特定于 Oracle AFAIK。然后查询id使用它。事实上,这一切都可以解决。

注意: 我强烈建议您查看 Aaron Digulla 的帖子。看看是否足够。