Specyfikacja JDBC 4.1, sekcja 13.6 Pobieranie wartości generowanych automatycznie mówi:
Jest to zdefiniowane w implementacji, czy getGeneratedKeys
zwróci wygenerowane wartości po wywołaniu executeBatch
metoda.
Musisz więc sprawdzić, czy twój sterownik faktycznie obsługuje aktualizacje wsadowe. Jak wskazano w odpowiedzi udzielonej przez Philipa O., pobieranie wygenerowanych kluczy nie jest obsługiwane w przypadku aktualizacji wsadowych, co udokumentowano w Oracle 12 JDBC Standards Support:
Nie można łączyć automatycznie wygenerowanych kluczy z aktualizacją zbiorczą.
W każdym przypadku, jeśli jest to obsługiwane przez twój sterownik, przygotowanie oświadczenia powinno zostać zmienione na poniższy kod, aby poinstruować sterownik, aby odzyskał wygenerowane klucze:
ps = con.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);
Uwaga:może być konieczne użycie jednego z innych wygenerowanych kluczy przygotowujących metody (prepareStatement(sql, columnIndexes)
lub prepareStatement(sql, columnNames)
), ponieważ Oracle zwróci ROW_ID
z metodą w moim przykładzie.