Правилният начин да извлечете своя първичен ключ е да използвате getGeneratedKeys
средство (което може да се активира с помощта на Statement.RETURN_GENERATED_KEYS
стойност с един от Statement.execute*
или Connection.prepareStatement
методи.
В повечето бази данни това може да се използва за директно извличане на първичния ключ. В случая на Oracle обаче това ще ви позволи да получите ROWID
, този ROWID
може да се използва за запитване към таблицата за вмъкнатия ред и получаване на първичния ключ.
Например:
stmt.executeUpdate("INSERT INTO theTable(column1) VALUES ('a')",
Statement.RETURN_GENERATED_KEYS);
ResultSet keys = stmt.getGeneratedKeys();
int primaryKey = -1;
if (keys.next()) {
try (PreparedStatement keyStatement =
connection.prepareStatement("SELECT ID FROM theTable WHERE ROWID = ?")) {
keyStatement.setRowId(keys.getRowId(1));
try (ResultSet rs = keyStatement.executeQuery()) {
primaryKey = rs.getInt(1);
}
}
}