我executeBatch()与JDBC一起使用以插入多行,并且我想为另一个插入获取插入行的ID,为此我使用以下代码:
insertInternalStatement = dbConncetion.prepareStatement(INSERT_RECORD, generatedColumns);
for (Foo foo: foosHashSet) {
insertInternalStatement.setInt(1, foo.getMe());
insertInternalStatement.setInt(1, foo.getMe2());
// ..
insertInternalStatement.addBatch();
}
insertInternalStatement.executeBatch();
// now get inserted ids
try (ResultSet generatedKeys = insertInternalStatement.getGeneratedKeys()) {
Iterator<Foo> fooIterator= foosHashSet.iterator();
while (generatedKeys.next() && fooIterator.hasNext()) {
fooIterator.next().setId(generatedKeys.getLong(1));
}
}
它工作正常并且返回id,我的问题是:
如果我进行迭代,getGeneratedKeys()并且foosHashSetID将以相同的顺序返回,以便从数据库返回的每个ID都属于对应的Foo实例?
当我使用多线程时,上面的代码同时在多个线程中运行怎么办?
还有其他解决方案吗?我有两个表foo1和foo2,我想先插入foo1记录,然后将其主ID用作foo2外键。
慕田峪7331174
相关分类