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

Posted

技术标签:

【中文标题】java.sql.SQLException:参数索引超出范围(4 > 参数个数,即 3)【英文标题】:java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 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 的参数索引 【参考方案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();
    

【讨论】:

非常感谢 如果您认为答案很好,最好点赞/将其标记为已接受(打绿色勾号),而不是仅仅发表“谢谢”评论:)

以上是关于java.sql.SQLException:参数索引超出范围(4 > 参数个数,即 3)的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:索引处缺少 IN 或 OUT 参数:: 1

java.sql.SQLException: 调用中无效的参数

java.sql.SQLException:调用中的参数无效:getBytes()

以下错误是啥意思:java.sql.sqlexception 在索引处缺少输入或输出参数

java.sql.SQLException:spring boot中的参数索引超出范围(6>参数个数,即5)

java.sql.SQLException: 调用中无效的参数DSRA0010E: SQL 状态 = null,错误代码 = 17,433