sql >> Base de Datos >  >> RDS >> Oracle

Manejo de excepciones de inserción por lotes de JDBC

Usted afirma que está ejecutando lotes de declaraciones SQL, así que asumo que está usando executeBatch . Cuando executeBatch un lote de declaraciones, algunas de las declaraciones pueden tener éxito y algunas de las declaraciones pueden fallar. Si una declaración falla, eso no significa que el controlador JDBC revierte las declaraciones que tuvieron éxito. El controlador JDBC puede optar por intentar ejecutar todas las declaraciones en el lote si falla una declaración o puede optar por dejar de ejecutar declaraciones en el lote una vez que falla una declaración (parece que el controlador que está utilizando elige dejar de ejecutar declaraciones como tan pronto como haya una falla).

Cuando falla una declaración en un lote, debe obtener una BatchUpdateException . En su controlador de excepciones, debe llamar a getUpdateCounts . Eso le dará una matriz de int que le dice cuántas filas actualizó la declaración, un Statement.SUCCESS_NO_INFO indicando que la declaración tuvo éxito pero no había un recuento de filas disponible, o un Statement.EXECUTE_FAILED indicando que la declaración falló. Si las primeras 99 declaraciones tienen éxito, la declaración número 100 genera un error y las declaraciones restantes no se ejecutan, debe obtener una matriz de 100 elementos donde los primeros 99 elementos indican éxito y el elemento número 100 indica Statement.EXECUTE_FAILED . Luego, su código necesitaría volver a intentar aquellas declaraciones que no se ejecutaron (en este caso, las declaraciones 101-1000).