Det korrekta sättet att hämta din primärnyckel är att använda getGeneratedKeys
facilitet (som kan aktiveras genom att använda Statement.RETURN_GENERATED_KEYS
värde med en av Statement.execute*
eller Connection.prepareStatement
metoder.
I de flesta databaser kan detta användas för att hämta primärnyckeln direkt. I fallet med Oracle kommer detta dock att tillåta dig att få ROWID
, denna ROWID
kan användas för att fråga tabellen för den infogade raden och erhålla primärnyckeln.
Till exempel:
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);
}
}
}