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

dzhpxtsq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(342)

我有一个mysql表和列(itemcode,itemcount),还有一个jtable和列(itemcode,itemcount,additemcount)
我想用jtable上的数据更新mysql表itemcount,但是我不知道如何使用where参数(itemcode),该参数可以根据每个jtable行中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命令放在for循环之外,它就不会得到需要作为参数的“row”,
如果我将sql命令放在for循环中,它只会更新最后一行,因为命令会在每个循环中不断重复。
如果where参数只取一个值(例如来自jtextfield),则它正常工作。

omtl5h9j

omtl5h9j1#

我不知道如何使用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。
然后,当它工作时,您可以尝试使用批处理更新。

相关问题