使用jtable单元格中的where参数更新mysql表

时间:2018-10-05 18:06:26

标签: java mysql swing jtable

我有一个带有列(itemCode,itemCount)的MySQL表, 而且我有一个带有列(itemCode,itemCount,AddItemCount)的jTable

我想用jTable上的数据更新MySQL表itemCount, 但是我不知道如何使用可以根据每个jTable行中itemCode的值而更改的where Parameter(itemCode)。

换句话说,我要在每个行中将数据库表itemCode与jTable itemCode匹配,然后更新匹配的itemCode的itemCount。

我已经尝试过的东西(这绝对是行不通的):

    int itemCount, addItemCount, totalItemCount; 
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con.setAutoCommit(false);
        int rows = tabelDetailDO.getRowCount();
        for(int row=0; row<rows; row++) {
            String SQLupdate = "UPDATE tableItem SET ItemCount=? WHERE ItemCode = '"+(String) tabelDetailDO.getValueAt(row, 0)+"' ";
            ps = con.prepareStatement(SQLupdate);
            itemCount = (int) tabelDetailDO.getValueAt(row, 2);
            addItemCount = (int) tabelDetailDO.getValueAt(row, 3);
            totalItemCount = itemCount + addItemCount;
            ps.setInt(1, totalItemCount);
            ps.addBatch();
         }
        ps.executeBatch();
        con.commit();            
    }
    catch (Exception e) {
        JOptionPane.showMessageDialog(rootPane, e);            
    } 

如果我将SQL Command放在for循环之外,它将不会获得需要作为参数的“行”,

如果我将SQL Command放在for循环中,则它只会更新最后一行,因为Command会在每个循环中不断重复。

如果where参数仅取一个值(例如来自jtextfield),则它正常工作。

1 个答案:

答案 0 :(得分:0)

  

我不知道如何使用where参数(itemCode),该参数可以根据每个jTable行中itemCode的值进行更改。

我不明白这种混乱。您可以使用与为“ ItemCount”指定参数相同的方式指定参数:

String SQLupdate = "UPDATE tableItem SET ItemCount= ? WHERE ItemCode = ?";
ps = con.prepareStatement(SQLupdate);

for(int row=0; row<rows; row++) 
{
    String itemCode = (String)tabelDetailDO.getValueAt(row, 0);
    itemCount = (int) tabelDetailDO.getValueAt(row, 2);
    addItemCount = (int) tabelDetailDO.getValueAt(row, 3);
    totalItemCount = itemCount + addItemCount;
    ps.setInt(1, totalItemCount);
    ps.setString(2, itemCode);
    ps.addBatch();
}

注意,我从未使用过批处理更新,因此首先尝试使逻辑在不使用批处理的情况下工作,因此您将需要在循环中每次执行更新。是的,我知道效率不高,但是您只是在测试SQL。

然后在这种情况下,您可以尝试使用批处理更新。