Oracle
 sql >> Database >  >> RDS >> Oracle

Gestione delle eccezioni di inserimento JDBC Batch

Affermi che stai eseguendo batch di istruzioni SQL, quindi presumo che stai usando executeBatch . Quando executeBatch un batch di istruzioni, alcune affermazioni potrebbero avere esito positivo e alcune affermazioni potrebbero non riuscire. Se un'istruzione ha esito negativo, ciò non significa che il driver JDBC esegue il rollback delle istruzioni riuscite. Il driver JDBC può scegliere di tentare di eseguire tutte le istruzioni nel batch se un'istruzione ha esito negativo oppure può scegliere di interrompere l'esecuzione delle istruzioni nel batch una volta che un'istruzione fallisce (sembra che il driver che stai utilizzando scelga di interrompere l'esecuzione delle istruzioni come non appena si verifica un errore).

Quando un'istruzione in un batch ha esito negativo, dovresti ottenere una BatchUpdateException . Nel tuo gestore delle eccezioni, devi chiamare getUpdateCounts . Questo ti darà un array di int che ti dice quante righe l'istruzione ha aggiornato, un Statement.SUCCESS_NO_INFO indicando che l'istruzione è riuscita ma non era disponibile il conteggio delle righe o un Statement.EXECUTE_FAILED indicando che la dichiarazione non è riuscita. Se le prime 99 istruzioni hanno esito positivo, la centesima istruzione genera un errore e le restanti istruzioni non vengono eseguite, dovresti recuperare un array di 100 elementi in cui i primi 99 elementi indicano il successo e il centesimo elemento indica Statement.EXECUTE_FAILED . Il tuo codice dovrebbe quindi riprovare quelle istruzioni che non sono state eseguite (in questo caso, le istruzioni 101-1000).