【发布时间】:2011-12-16 18:06:35
【问题描述】:
批量插入多行后,我希望检索生成的键及其对应的插入行。我如何有效地做到这一点?
我可以天真地使用 statement.getGeneratedKeys() 根据每个生成的 id 查询数据库中的每一行,但这似乎很慢。
下面的代码执行批量插入,然后遍历表中的所有结果,但是我不想包含插入之前表中已经存在的数据。
有其他选择吗?
【问题讨论】:
标签: jdbc batch-file
批量插入多行后,我希望检索生成的键及其对应的插入行。我如何有效地做到这一点?
我可以天真地使用 statement.getGeneratedKeys() 根据每个生成的 id 查询数据库中的每一行,但这似乎很慢。
下面的代码执行批量插入,然后遍历表中的所有结果,但是我不想包含插入之前表中已经存在的数据。
有其他选择吗?
【问题讨论】:
标签: jdbc batch-file
您有一个您感兴趣的 ID 列表。您可以使用 'id in (...,...,)' 约束:
StringBuilder newIds = new StringBuilder();
ResultSet rs = stmt.getGeneratedKeys();
while (rs.next()) {
if (newIds.length() > 0) newIds.append(',');
newIds.append(rs.getInt(1));
}
if (newIds.length() > ) {
rs = stmt.executeQuery("SELECT * FROM survey where id in ("+newIds+")");
...
}
【讨论】: