与h2数据库和多线程

时间:2015-07-24 16:39:13

标签: java database multithreading h2

当我尝试使用多线程程序插入多个数据时,我遇到了问题。我有一个自动增量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);
    }

只有在使用多个线程 时才会出现此问题。可能会发生什么?

0 个答案:

没有答案