Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Manipulação de exceção de inserção de lote JDBC


Você afirma que está executando lotes de instruções SQL, então estou assumindo que você está usando executeBatch . Quando você executeBatch um lote de instruções, algumas das instruções podem ser bem-sucedidas e outras podem falhar. Se uma instrução falhar, isso não significa que o driver JDBC reverte as instruções bem-sucedidas. O driver JDBC pode optar por tentar executar todas as instruções no lote se uma instrução falhar ou pode optar por interromper a execução de instruções no lote quando uma instrução falhar (parece que o driver que você está usando opta por parar de executar instruções como assim que houver uma falha).

Quando uma instrução em um lote falha, você deve obter uma BatchUpdateException . Em seu manipulador de exceção, você precisa chamar getUpdateCounts . Isso lhe dará uma matriz de int que informa quantas linhas a instrução atualizou, um Statement.SUCCESS_NO_INFO indicando que a instrução foi bem-sucedida, mas nenhuma contagem de linhas estava disponível ou um Statement.EXECUTE_FAILED indicando que a declaração falhou. Se as primeiras 99 instruções forem bem-sucedidas, a 100ª instrução gerar um erro e as instruções restantes não forem executadas, você deverá obter de volta uma matriz de 100 elementos onde os primeiros 99 elementos indicam sucesso e o 100º elemento indica Statement.EXECUTE_FAILED . Seu código precisaria tentar novamente as instruções que não foram executadas (neste caso, as instruções 101-1000).