2009-05-22 7 views
2

J'ai java.sql.Statement avec beaucoup d'instructions de lot ajoutées avec addBatch. L'exécution de executeBatch lancera BatchUpdateException après la première instruction qui enfreint les contraintes de base de données et n'exécutera pas toutes les instructions restantes par lot. Est-il possible que je puisse exécuter toutes les instructions en batch en ignorant celles qui sont erronées?Comment ignorer toutes les instructions erronées et exécuter toutes les bonnes dans JDBC executeBatch?

Répondre

2

Je pense qu'une meilleure solution serait de corriger les erreurs. Qu'est-ce qui ne va pas? Le SQL? Les tables sous-jacentes? Les données?

Les exceptions sont supposées être "exceptionnelles". Quelle est la situation si commune que vous êtes susceptible de le voir plus souvent avec ce lot?

L'exception vous indique que quelque chose ne va pas. Je ne voudrais pas recommander un correctif qui vous permettrait d'ignorer le message. Si une exception est levée, cela signifie que vous avez la possibilité d'améliorer son problème racine dans le bloc catch.

Si vous passez en boucle sur chaque instruction du lot, vous pouvez capturer l'exception de chacune individuellement et enregistrer simplement l'erreur. Ne l'ignorez pas complètement. Mais à moins que vous ne puissiez penser à une autre stratégie de récupération, vous n'avez pas de chance.

0

Bien, si vous voulez enregistrer toutes les données qui ont pu être insérées, il suffit d'exécuter la validation, et ont été sauvegardés.

Il n'est pas possible de boucler chaque instruction du lot, mais seulement lorsque vous appelez execute batch, vous obtiendrez l'exception, pas sur chaque instruction (addbatch), donc il n'est pas possible de trouver exactement où se trouve l'erreur: peut en sauver une partie, ou rien, vous décidez (commit ou rollback).