我正在尝试更新我的数量列,但它给了我错误..
这是我的代码:
private void BtnPurchsPurchaseRunningOutActionPerformed(java.awt.event.ActionEvent evt) {
try{
String upd = "update for_purchaseitems set Quantity=Quantity+? where Description=?;";
pst=conn.prepareStatement(upd);
pst.executeUpdate(upd);
if(rs.next()){
pst.setString(1, txt_PurchsQty.getText());
pst.setString(2, txt_PurchsDesc.getText());
JOptionPane.showMessageDialog(null, "success!");
}
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
Updatefor_PurchaseItem();
BtnPurchsPurchaseRunningOut.setVisible(false);
BtnPurchsPurchase.setVisible(true);
}
错误消息显示:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用'?其中Description =?'在第1行
答案 0 :(得分:2)
在您之前设置参数之前,您已拥有executeUpdate
;所以语句最终得到 literal ?
而不是你的参数。你想要的顺序是:
所以:
pst=conn.prepareStatement(upd);
pst.setString(1, txt_PurchsQty.getText()); // Before
pst.setString(2, txt_PurchsDesc.getText()); // Before
pst.executeUpdate(upd); // After
if(rs.next()){
另请注意问题中遗漏的;
之后的pst.setString(2, txt_PurchsDesc.getText())
。
如果quantity
是数字列,+
和名称建议,请不要使用setString
;使用setInt
或setLong
:
pst=conn.prepareStatement(upd);
pst.setInt(1, Integer.parseInt(txt_PurchsQty.getText())); // <===
pst.setString(2, txt_PurchsDesc.getText());
pst.executeUpdate(upd);
if(rs.next()){
另外:许多JDBC提供商都可以使用它,但您不需要或希望在语句结尾处使用;
并且可以/应该删除它。
String upd = "update for_purchaseitems set Quantity=Quantity+? where Description=?;";
// Here --------------------------------------------------------------------------^