2017-02-27 2 views
1

J'ai une page .jsp qui a une case à cocher multiple. Je suis capable d'insérer les valeurs de case à cocher multiples, mais lorsque vous utilisez une mise à jour, il ajoute les lignes de case à cocher actuelles plus les lignes de valeur de case à cocher supplémentaires. Si je coche une case de plus, il faut ajouter 1 ligne de plus et ainsi de suite.Modifié: Comment mettre à jour plusieurs lignes dans java jdbc sur la valeur dupliquée

Voici mon code qui fonctionne pour la mise à jour: CollDAO.java:

//Insert checkbox records 
public void addColl(String qId, String[] arrayColId) { 
    try { 
    PreparedStatement ps = con.preparedStatement("insert into colTable(qId, colId) values(?,?)"); 

    for(int i = 0; i < arrayColId.length; i++) { 
    ps.setString(1, qId); 
    ps.setString(2, arrayColId[i]); 
    ps.executeUpdate(); 
    } 
    } catch (SQLException e) { 
    e.printStackTrace(); 
    } 
} 

Si je sélectionne 2 cases c'est à quoi il ressemble.

rowid | qID | cid - CORRECT

: 101: | : 121: | : 9:

: 100: | : 121: | : 13:

//Update checkbox records 
public void updateColl(String qId, String[] arrayColId) { 
    try { 
    String sql = "update colTable set colId=?, where qId=?"; 
    PreparedStatement ps = con.preparedStatement(sql); 

    for(int i = 0; i < colId; i++) { 
    ps.setString(1, colId[i]); 
    ps.setString(2, qId); 
    ps.executeUpdate(); 
    } 

    } catch (SQLException e) { 
    e.printStackTrace(); 
    } 
} 

Si je sélectionne 3 cases à cocher c'est ce que soient mis à jour.

rowid | qID | cid - SORTIE MAL

: 105: | : 121: | : 2:

: 104: | : 121: | : 9:

: 103: | : 121: | : 13:

: 101: | : 121: | : 9:

: 100: | : 121: | : 13:

C'est ce à quoi cela ressemble.

rowid | qID | cid - CORRECT SORTIE

: 103: | : 121: | : 2:

: 101: | : 121: | : 9:

: 100: | : 121: | : 13:

J'ai travaillé sur cela pendant une semaine, quelqu'un peut-il m'aider?

Merci

+0

Vous devez vérifier les valeurs dans arrayColID. – Sedrick

Répondre

0

Dans votre cas, vous devez utiliser des lots à la place:

PreparedStatement ps = con.preparedStatement("your query"); 

for(int i = 0; i < arrayColId.length; i++) { 
    ps.setString(1, qId); 
    ps.setString(2, arrayColId[i]); 
    ps.addBatch();  
} 

ps.executeBatch(); 

Vous pouvez en savoir plus ici Reusing a PreparedStatement multiple times et Statament batching

Modifier

Pour votre mise à jour vous pouvez utiliser:

connection.setAutoCommit(false); 

int arrayVals = Math.min(arrayColId.length, arrayQId.length); 
for (int i = 0; i < arrayVals; i++) { 
    ps.setString(1, arrayColId[i]); 
    ps.setString(2, arrayQId[i]); 
    ps.addBatch(); //add a batch 
} 

ps.executeBatch();//execute your batch 

connection.commit();//when you finish you should to commit your transaction 
+0

@Gee vous pouvez utiliser le lot avec insertion ou mise à jour ou toute opération –

+0

oui @Gee, avec les deux, saviez-vous comment compléter votre code, ou je devrais modifier ma réponse? –

+0

@Gee i modifier ma réponse –