我有一个带有列(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),则它正常工作。
答案 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。
然后在这种情况下,您可以尝试使用批处理更新。