Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie erhalte ich generierte Schlüssel aus der JDBC-Batch-Einfügung in Oracle?

Die JDBC 4.1-Spezifikation, Abschnitt 13.6 Automatisch generierte Werte abrufen sagt:

Es ist implementierungsabhängig, ob getGeneratedKeys gibt generierte Werte zurück, nachdem executeBatch aufgerufen wurde Methode.

Sie müssen also überprüfen, ob Ihr Treiber dies tatsächlich für Batch-Updates unterstützt. Wie in der Antwort von Philip O. angegeben, wird der Abruf von generierten Schlüsseln nicht mit Stapelaktualisierungen unterstützt, wie in Oracle 12 JDBC Standards Support dokumentiert:

Sie können automatisch generierte Schlüssel nicht mit der Stapelaktualisierung kombinieren.

Wenn es von Ihrem Treiber unterstützt wird, sollte Ihre Anweisung auf jeden Fall in den folgenden Code geändert werden, um den Treiber anzuweisen, generierte Schlüssel abzurufen:

ps = con.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);

Hinweis:Möglicherweise müssen Sie eine der anderen generierten Schlüsselvorbereitungsmethoden verwenden (prepareStatement(sql, columnIndexes) oder prepareStatement(sql, columnNames) ), da Oracle die ROW_ID zurückgibt mit der Methode in meinem Beispiel.