【问题标题】:java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3) errorjava.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3) 错误
【发布时间】:2021-08-26 03:23:09
【问题描述】:

当我执行此代码时,出现错误:java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3) 发生。这段代码有什么问题?

 DefaultTableModel RecordTable = (DefaultTableModel)jTable1.getModel();
        if (jTable1.getSelectedRowCount()==1){
            String type = jComboBox_type.getSelectedItem().toString();
            String size =jComboBox_size.getSelectedItem().toString();
            String qty = jSpinner1.getValue().toString();
            String tot = String.valueOf(total);
            String uprice = String.valueOf(price);
            finaltotal = finaltotal +total;
            jTextField_finaltot.setText(String.valueOf(finaltotal));
            
            RecordTable.setValueAt(type,jTable1.getSelectedRow(),0);
            RecordTable.setValueAt(size,jTable1.getSelectedRow(),1);
            RecordTable.setValueAt(uprice,jTable1.getSelectedRow(),2);
            RecordTable.setValueAt(qty,jTable1.getSelectedRow(),3);
            RecordTable.setValueAt(tot,jTable1.getSelectedRow(),4);
                   
        
        String sql ="UPDATE `sales` SET `Type`=?,`Size`=?,`Unit_Price`=?',`Quantity`=?,`Total`=? WHERE `Type`=?";
        
            try {
                pst =dbConnection.getConnection().prepareStatement(sql);
                pst.setString(1, type);
                pst.setString(2, size);
                pst.setString(3, uprice);
                pst.setString(4, qty);
                pst.setString(5, tot);
                
               result =pst.executeUpdate();
            } catch (SQLException ex) {
                Logger.getLogger(Pizza_Menu.class.getName()).log(Level.SEVERE, null, ex);
            }
           
            



        }

【问题讨论】:

  • 去掉所有的引号。使用 PreparedStatement 的一个原因是简化 SQL 而不必担心引号。 PreparedStatement 将为您完成。

标签: java netbeans-8


【解决方案1】:

Unit Price问号后面的单引号需要去掉

String sql ="UPDATE `sales` SET `Type`=?,`Size`=?,`Unit_Price`=?',`Quantity`=?,`Total`=? WHERE `Type`=?";

【讨论】:

  • 你的 where 子句是否匹配任何行?
【解决方案2】:

正如上面的 cmets/answers 建议的那样,删除 ' 引号。

' 引号代表 SQL 中的 string 值。

SQL 中的" 引号代表表/模式/列等。不过,您的情况下不需要它们。

另一个错误是您的查询中有 6 个参数,但只有 5 个赋值:

  1. Type=? => pst.setString(1, type);
  2. Size=? => pst.setString(2, size);
  3. Unit_Price=? => pst.setString(3, uprice);
  4. Quantity=? => pst.setString(3, uprice);
  5. Total=? => pst.setString(5, tot);
  6. Type=? => ????未映射

所以添加另一个pst.setString(6, "Your Value")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多