A especificação JDBC 4.1, seção 13.6 Recuperando valores gerados automaticamente diz:
É definido pela implementação segetGeneratedKeys
retornará valores gerados após invocar oexecuteBatch
método.
Portanto, você precisará verificar se o driver realmente o suporta para atualizações em lote. Conforme indicado na resposta de Philip O., a recuperação de chaves geradas não é compatível com atualizações em lote, conforme documentado no Oracle 12 JDBC Standards Support:
Você não pode combinar chaves geradas automaticamente com atualização em lote.
De qualquer forma, se for suportado pelo seu driver, sua instrução prepare deve ser alterada para o código abaixo para instruir o driver a recuperar as chaves geradas:
ps = con.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);
Nota:você pode precisar usar um dos outros métodos de preparação de chaves geradas (
prepareStatement(sql, columnIndexes)
ou prepareStatement(sql, columnNames)
) pois o Oracle retornará o ROW_ID
com o método no meu exemplo.