如果升級/更換JDBC驅動程序不是一個選項(SQLiteJDBC似乎支持它),那麼您確實需要觸發SELECT last_insert_rowid()
查詢來獲取生成的密鑰。爲了避免併發插入競爭條件,在事務中激發它。
connection = database.getConnection();
connection.setAutoCommit(false); // Starts transaction.
preparedStatement = connection.prepareStatement(INSERT_SQL);
preparedStatement.setSomething(something);
// ...
preparedStatement.executeUpdate();
statement = connection.createStatement();
generatedKeys = statement.executeQuery("SELECT last_insert_rowid()");
if (generatedKeys.next()) {
generatedKey = generatedKeys.getLong(1);
}
connection.commit(); // Commits transaction.
如果驅動程序不支持它,您需要一個新的驅動程序,另一個數據庫或自己編寫SELECT。無法保證您提供的示例查詢將適用於多位併發用戶。 – duffymo 2010-11-28 18:41:26