2017-02-27 82 views
1

我有一个多选复选框的.jsp页面。我可以插入多个复选框值,但在使用更新时,它会添加当前复选框行和额外的复选框值行。如果我再检查一个盒子,它应该再添加一个等等。修改:如何更新重复值的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 - 正确

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

如果我选择3个复选框这是得到更新。

rowid | qID | CID - 输出错误

: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:

我一直在为此工作一个星期,有人可以帮助我吗?

谢谢

+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 timesStatament 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

@编辑我的答案 –