2017-09-14 1 views
1

J'essaie d'insérer une valeur sans out l'exécution par lots renverra la valeur que je mentionne dans la requête mais ne fonctionne pas dans l'exécution par lots. Il renvoie uniquement un tableau d'entiers avec le statut 1 ou 0. Mon code d'exemple sont donnés ci-dessous.Jeu de résultats PostgreSQL renvoyé par executeBatch dans java

Connection connection = ConnectionManager.getInstance().getDBConnection(); 

     String query = "insert into custom_attribute_mapping (product_id,attribute_id,attribute_values) values (49,22,'yyyyyyyyyyyyy') RETURNING attribute_mapping_id"; 

     try (PreparedStatement prepStmt2 = connection 
       .prepareStatement(query)) { 
      int i =0;  
      ResultSet rs = prepStmt2.executeQuery(); 
      while (rs.next()) { 
       System.out.println(rs.getInt(1)); 

      } 
     } catch (Exception e) { 

     } 

Dans le code ci-dessus j'ai obtenu la valeur de l'attribut_mapping_id. mais dans le code ci-dessous le type de retour de executeBatch est un tableau d'entiers et il a seulement le statut d'insertion.

Connection connection = ConnectionManager.getInstance().getDBConnection(); 

    String query = "insert into custom_attribute_mapping (product_id,attribute_id,attribute_values) values (49,22,'yyyyyyyyyyyyy') RETURNING attribute_mapping_id"; 

    try (PreparedStatement prepStmt2 = connection 
      .prepareStatement(query)) { 
     int i =0; 
     while(i<5){ 
      i++; 
      prepStmt2.addBatch(); 
     }   
     int[] rs = prepStmt2.executeBatch(); 
     for(int r:rs){ 
      System.out.println(r); 
     } 

    } catch (Exception e) { 

    } 

peut-on s'il vous plaît aidez-moi.

Répondre

1

Vous ne pouvez pas obtenir les valeurs générées lorsque vous utilisez executeBatch(). Il ne retourne compte de mise à jour et même ceux qui ne sont pas très clearly defined:

Les éléments du tableau retourné par la méthode executeBatch peut être une des opérations suivantes:

Un nombre supérieur ou égal à zéro - indique que la commande a été traitée avec succès et est un nombre de mise à jour indiquant le nombre de lignes dans la base de données qui ont été affectées par l'exécution de la commande

une valeur de SUCCESS_NO_INFO - indique que la commande a été générée avec succès mais que le nombre de lignes affectées est inconnu

Si l'un des les commandes dans une mise à jour de lot ne parvient pas à exécuter correctement, cette méthode jette un BatchUpdateException, et un pilote JDBC peut ou non continuer à traiter la commandes restantes dans le lot. Toutefois, le comportement du pilote doit être cohérent avec un SGBD particulier, soit continuant toujours à traiter les commandes, soit ne continuant jamais à traiter les commandes . Si le conducteur poursuit le traitement après une panne, la matrice renvoyée par la méthode BatchUpdateException.getUpdateCounts sera contient autant d'éléments qu'il y a de commandes dans le lot, et à moins l'un des éléments sera le suivant:

Une valeur de EXECUTE_FAILED - indique que la commande a échoué à s'exécute avec succès et se produit uniquement si un pilote continue à traiter commandes après une commande échoue