(更新)JAVA:在表列中添加数据量

时间:2015-07-31 17:49:50

标签: java

我正在尝试更新我的数量列,但它给了我错误..

这是我的代码:

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行

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;使用setIntsetLong

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 --------------------------------------------------------------------------^