2014-06-10 5 views
0

J'utilise l'insertion par lots de mon application Java dans la base de données mysql pour le chargement de données en vrac. Pour la compilation d'un résultat des exécutions ont échoué, nous traitons BatchUpdateException de la manière suivante:mysql connecteur jdbc mise à jour par lots exception mise à jour compte pas comme prévu

 

catch (BatchUpdateException e) 
     { 
      int[] codes = e.getUpdateCounts(); 


      for (int i = 0; i<codes.length; i++) 
      { 
       if (Statement.EXECUTE_FAILED == codes[i]) 
       { 
        lr.recordLoadCount--; 

        //`records` is a List containing the objects which were 
        //added in this batch 

        lr.addFailReason(records.get(i).xmlString()); 


       } 
      } 

      lr.addException(e.getMessage()); 

     } 
 

je courais un cas où toutes les exécutions échoueraient (tableau n'existe pas). Donc idéalement, j'aurais une raison d'échec ajoutée pour chaque album.

Cependant, je pourrais trouver que tous sauf le premier enregistrement, ont été ajoutés. Quand j'ai débogué le code, j'ai trouvé que les codes [0] arrivaient comme '-1', alors que tous les autres arrivent comme '-3' (qui est Statement.EXECUTE_FAILED).

Comme par Javadocs:

 
public int[] getUpdateCounts() 

Returns: 
an array of int containing the update counts for the updates that were executed 
successfully before this error occurred. 

Or, if the driver continues to process commands after an error, one of the 
following for every command in the batch: 

- an update count 
- Statement.SUCCESS_NO_INFO ('-2') 
- Statement.EXECUTE_FAILED ('-3') 

Question: Est-ce que le connecteur MySql/J ne fixe pas le nombre de mise à jour correctement pour le premier échec de l'exécution d'un lot, ou je manque quelque chose ici? Quelqu'un at-il rencontré un tel scénario? J'utilise connecteur/J 5.1.30; Mysql 5.5.24 sur Ubuntu 12.04

+0

Cela ressemble à un bug, peut-être que vous devriez déposer un ticket chez Oracle. –

+0

@MarkRotteveel Semble donc. Je voulais juste confirmer avant de lever un ticket. Merci. –

Répondre

0

J'ai trouvé le problème avec l'option de connexion "rewriteBatchedStatements = true". Lorsque cette option est utilisée, le problème signalé se produit. Signalez-le comme un bug.

Questions connexes