我有一个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),则它正常工作。
1条答案
按热度按时间omtl5h9j1#
我不知道如何使用where参数(itemcode),它可以根据每个jtable行中itemcode的值进行更改。
我不明白这种混乱。指定参数的方法与为“itemcount”指定参数的方法相同:
注意,我从未使用过批处理更新,因此首先尝试在没有批处理的情况下使逻辑工作,因此每次在循环中都需要执行更新。是的,我知道效率不高,但你只是在测试sql。
然后,当它工作时,您可以尝试使用批处理更新。