java.sql.SQLException:参数索引超出范围(4>;参数数,即3)

java.sql.SQLException:参数索引超出范围(4>;参数数,即3),java,mysql,sql,Java,Mysql,Sql,代码片段中有几个问题需要解决: UPDATEquery的SQL语法无效 第四个查询参数的索引可能不正确(pa.setInt(PROPERTIES,…)) 建议使用try with resources自动关闭连接对象 将数据库更新从actionPerformed实现中移出,移动到一个单独的方法updateMstock() 也就是说,以下代码应该解决所有提到的问题: private void changebutonActionPerformed(java.awt.event.ActionEven

代码片段中有几个问题需要解决:

  • UPDATE
    query的SQL语法无效
  • 第四个查询参数的索引可能不正确(
    pa.setInt(PROPERTIES,…)
  • 建议使用
    try with resources
    自动关闭
    连接
    对象
  • 将数据库更新从
    actionPerformed
    实现中移出,移动到一个单独的方法
    updateMstock()
也就是说,以下代码应该解决所有提到的问题:

private void changebutonActionPerformed(java.awt.event.ActionEvent evt){
updateMstock();
}
私有void updateMstock(){
try(Connection con=getConnection()){
准备好的报表pa=con.prepareStatement(
“更新mstock集合mehsul_adi=?,mehsul_ceki=?,mehsul_tarix=?其中mehsul_kodu=?”
);
pa.setString(1,mehsul_adi.getText());
pa.setString(2,mehsul_ceki.getText());
SimpleDataFormat dateFormat=新的SimpleDataFormat(“dd-MM-yyyy”);
字符串tarix=dateFormat.format(mehsul_tarix.getDate());
pa.setString(3,tarix);
pa.setInt(4,Integer.valueOf(mehsul_kodu.getText());
pa.executeUpdate();
showMessageDialog(null,“Yeniliklər yadda saxlanıldı”);
}捕获(例外e){
e、 printStackTrace();
}
}

为什么这个问题被标记为c#?不要使用额外的标签来吸引更多的注意力。这种类型的东西在这里不太适用。请注意,您使用硬编码值1、2和3来指向索引,而您的数据结构(您忽略了包括)可能是基于零的,这意味着索引应该是0、1和2。请尝试使用0、1和3来代替1、2和32@MarsAtomic,@ChetanRanpanya,
PreparedStatement的参数索引
非常感谢如果您认为答案很好,最好将其升级投票/标记为已接受(打绿色勾),而不仅仅是发表“谢谢”评论:)
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();
        }
    }