我使用 Statement.RETURN_GENERATED_KEYS 一个接一个地运行两个 INSERT sql 调用,每个插入都分配了自己的唯一 ID。
每个调用都是使用 connection.prepareStatement 生成的,其中连接可以由不同的线程(连接池或嵌入式数据库 - 无论哪种方式都是同一个问题)重用。
所以当我这样做时:
result = preparedStatement.getGeneratedKeys();
result.next();
return result.getInt(1);
返回的数字似乎不是线程安全的!它通常从通过的第一个线程中获取生成的 ID。
基本上,如果我运行多个线程,则 INSERTS 工作正常,但随后尝试获取自动生成的唯一 ID,它会返回相同的 ID。再次,我怀疑这是因为连接是共享的,我是怎么做的
connection.prepareStatement(sqlString, Statement.RETURN_GENERATED_KEYS);
我看到有许多替代参数,但我不熟悉它们。我怎样才能以某种方式保证每个preparedStatement 稍后都会返回它自己唯一的自动生成的ID?
更新: 这似乎只发生在嵌入式 derby 数据库驱动程序中......