2017-02-27 9 views
1

複数のチェックボックスを持つ.jspページがあります。私は複数のチェックボックスの値を挿入することができますが、更新を使用すると、現在のチェックボックスの行と追加のチェックボックスの値の行が追加されます。もう1つのボックスをチェックすると、1行が追加されます。ここで変更されました:重複した値でjava jdbcの複数の行を更新する方法

は、更新のために働く私のコードです: 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(); 
    } 
} 

私は2つのチェックボックスを選択した場合、これは、それがどのように見えるかです。

rowid | qID | CID - CORRECT

:101:| :121:| 9:

:100: :121:| :13:私は3つのチェックボックスを選択した場合

//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(); 
    } 
} 

これは、更新され得るものです。

rowid | qID | CID - WRONG OUTPUT

:105:| :121:| :2:

:104:| :121:| :9:

:103:| :121:| :13:

:101: :121:| 9:

:100: :121:| :13:

これは、次のようになります。

rowid | qID | CID - 正しい出力

:103:| :121:| :2:

:101: :121:| 9:

:100: :121:| :13:

私は1週間この作業をしていますが、誰かが私を助けることができますか?

は、あなたの場合、あなたが代わりにバッチを使用するようにすべきではあなたに

+0

arrayColIDの値を確認する必要があります。 – Sedrick

答えて

0

ありがとう:

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(); 

あなたがより多くのここReusing a PreparedStatement multiple timesを学ぶことができるとStatament batching

を編集

あなたの更新のためにあなた使用できる:

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

@あなたはバッチを挿入または更新または任意の操作で使用できます –

+0

はい@Gee、両方とも、あなたのコードを完成させる方法を知っていましたか、私は自分の答えを編集する必要がありますか? –

+0

@Gee私の回答を編集 –

関連する問題