Oracle
 sql >> Base de données >  >> RDS >> Oracle

Gestion des exceptions d'insertion JDBC Batch

Vous déclarez que vous exécutez des lots d'instructions SQL, donc je suppose que vous utilisez executeBatch . Lorsque vous executeBatch un lot d'instructions, certaines des instructions peuvent réussir et certaines des instructions peuvent échouer. Si une instruction échoue, cela ne signifie pas que le pilote JDBC annule les instructions qui ont réussi. Le pilote JDBC peut choisir de tenter d'exécuter toutes les instructions du lot si une instruction échoue ou il peut choisir d'arrêter l'exécution des instructions du lot une fois qu'une instruction échoue (il semble que le pilote que vous utilisez choisit d'arrêter l'exécution des instructions comme dès qu'il y a une panne).

Lorsqu'une instruction dans un lot échoue, vous devriez obtenir une BatchUpdateException . Dans votre gestionnaire d'exceptions, vous devez appeler getUpdateCounts . Cela vous donnera un tableau de int qui vous indique soit le nombre de lignes mises à jour par l'instruction, soit un Statement.SUCCESS_NO_INFO indiquant que l'instruction a réussi mais qu'aucun nombre de lignes n'était disponible, ou un Statement.EXECUTE_FAILED indiquant que l'instruction a échoué. Si les 99 premières instructions réussissent, la 100e instruction génère une erreur et les instructions restantes ne sont pas exécutées, vous devez récupérer un tableau de 100 éléments où les 99 premiers éléments indiquent le succès et le 100e élément indique Statement.EXECUTE_FAILED . Votre code devra alors réessayer les instructions qui n'ont pas été exécutées (dans ce cas, les instructions 101-1000).