Prawidłowym sposobem na odzyskanie klucza podstawowego jest użycie getGeneratedKeys
funkcja (którą można aktywować za pomocą Statement.RETURN_GENERATED_KEYS
wartość z jednym z Statement.execute*
lub Connection.prepareStatement
metody.
W większości baz danych można to wykorzystać do bezpośredniego pobrania klucza podstawowego. W przypadku Oracle pozwoli to jednak uzyskać ROWID
, ten ROWID
może być użyty do zapytania tabeli o wstawiony wiersz i uzyskania klucza głównego.
Na przykład:
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);
}
}
}