当我尝试使用多线程程序插入多个数据时,我遇到了问题。我有一个自动增量id的表。有时,数据库会返回一个带有高值的ID。插入行后,数据库中不存在id。我尝试使用干净的数据库。
一个例子:
inserted id: 141 - Thread: 21
inserted id: 142 - Thread: 22
inserted id: 143 - Thread: 18
inserted id: 144 - Thread: 20
插入ID:800 - 主题:19
inserted id: 146 - Thread: 23
inserted id: 147 - Thread: 21
inserted id: 148 - Thread: 22
inserted id: 149 - Thread: 18
当主题19 尝试另一次插入时,在引用id 800时,此ID失败。例外情况说这个id不存在。它确实不存在。
我使用下一个方法插入并获取行ID:
final String insertTerm = "INSERT INTO TERMS (NAME,TYPE) VALUES (?,?)";
PreparedStatement preparedStatementInsert = this.connection
.prepareStatement(insertTerm,
Statement.RETURN_GENERATED_KEYS);
preparedStatementInsert.setString(1, name);
preparedStatementInsert.setString(2, type);
synchronized (this) {
preparedStatementInsert.executeUpdate();
}
ResultSet generatedKeys = preparedStatementInsert
.getGeneratedKeys();
if (generatedKeys.next()) {
id = generatedKeys.getInt(1);
}
只有在使用多个线程 时才会出现此问题。可能会发生什么?