【问题标题】:java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3)java.sql.SQLException:参数索引超出范围(4 > 参数个数,即 3)
【发布时间】:2020-08-25 21:27:32
【问题描述】:
private void changeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        try {
            Connection con = getConnection();
            PreparedStatement pa = con.prepareStatement("Uptade mstock Set (mehsul_adi,  mehsul_ceki , mehsul_tarix ) values(?,?,?) WHERE mehsul_kodu='?' ");
             pa.setString(1, mehsul_adi.getText());
                pa.setString(2,mehsul_ceki.getText());
                 SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
              
               String tarix = dateFormat.format(mehsul_tarix.getDate());
                pa.setString(3, tarix);
               pa.setInt(PROPERTIES, Integer.valueOf(mehsul_kodu.getText()));
               pa.executeUpdate();
               JOptionPane.showMessageDialog(null,"Yeniliklər yadda saxlanıldı.");
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }                               

【问题讨论】:

  • 为什么这个问题被标记为 c#?不要使用额外的标签来吸引更多关注您的问题。这类事情在这里不顺利。
  • 请注意,您使用硬编码值 1、2 和 3 指向索引,而您的数据结构(您忽略包含)可能是从零开始的,这意味着索引应该是 0、1和 2.
  • 尝试使用 0,1 和 2 而不是 1,2 和 3
  • @MarsAtomic,@ChetanRanpanya,PreparedStatementstart from 1 的参数索引

标签: java mysql sql


【解决方案1】:

代码sn-p有几个问题需要解决:

  • UPDATE 查询的 SQL 语法无效
  • 第四个查询参数的索引可能不正确 (pa.setInt(PROPERTIES,...))
  • 对于可自动关闭的Connection 对象,建议使用try-with-resources
  • 将 DB 更新从 actionPerformed 实现中移出到单独的方法 updateMstock()

话虽如此,下面的代码应该可以解决所有提到的问题:

private void changeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    updateMstock();
}

private void updateMstock() {
    try (Connection con = getConnection()) {
        PreparedStatement pa = con.prepareStatement(
            "UPDATE mstock SET mehsul_adi=?,  mehsul_ceki=?, mehsul_tarix=? WHERE mehsul_kodu=? "
        );

        pa.setString(1, mehsul_adi.getText());
        pa.setString(2, mehsul_ceki.getText());

        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
              
        String tarix = dateFormat.format(mehsul_tarix.getDate());
        pa.setString(3, tarix);
        pa.setInt(4, Integer.valueOf(mehsul_kodu.getText()));
        pa.executeUpdate();

        JOptionPane.showMessageDialog(null,"Yeniliklər yadda saxlanıldı.");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 非常感谢
  • 如果您认为答案很好,最好点赞/将其标记为已接受(打绿色勾号),而不是仅仅发表“谢谢”评论:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2013-04-18
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多