【问题标题】:java.lang.Exception: Parameter index out of range (2 > number of parameters, which is 1)java.lang.Exception:参数索引超出范围(2 > 参数数量,即 1)
【发布时间】:2012-10-31 15:44:53
【问题描述】:

我很想知道为什么会出现这个错误:java.lang.Exception: Parameter index out of range (2 > number of parameters, which is 1)。

是的,我使用 PreparedStatement

 SQL="SELECT pcsv("+servidor_virtual_nuestro+","+nivel_cuenta_receptora+","+codigo_sku[id_componente]+","+t_precio[tipo_precio]+",0) as p_unitario FROM servidores_virtuales t1"+
 "WHERE t1.id_servidor_virtual= ? ";


PreparedStatement pstm100 = this.conexion.prepareStatement(SQL);

pstm100.setInt(1, servidor_virtual_nuestro);

ResultSet rs66 =  pstm100.executeQuery();

pcsv 是我创建的一个程序,所以我不知道为什么会出现这个错误,您能帮帮我吗?非常感谢

【问题讨论】:

  • 你能显示pcsv的代码吗?
  • 使用callableStatements调用storedProcedure
  • 上面的 SQL 字符串在填充变量的情况下会得出什么结果?
  • where 子句中的“t1”是什么?它是表的别名吗?
  • 它来自 servidores_virtuales t1

标签: java mysql prepared-statement


【解决方案1】:

我不知道什么会导致抛出异常,但我想这可能是您创建不正确的 SQL 事实的副作用。您的 SQL 字符串在 t1WHERE 之间需要一个空格。

或者它可能是您的某些变量中的一些额外问号。在执行之前尝试将 SQL 字符串打印到日志或stdout

【讨论】:

  • 我已经打印了,同样的问题没问题。
【解决方案2】:
public void ReturnUpdate() {
        String sql = "insert into returnbook (`Student Id`,`Student Name`,`Father Name`,Course,Branch,Year,Semester,`Book Id`,`Book Name`,Edition,Publisher,Price,Pages,`Date of Issue`,`Date of Return`) values ";
        try{
         pst = conn.prepareStatement(sql);
         pst.setString (1,  jTextField1.getText());
         pst.setString (2,  jTextField2.getText());
         pst.setString (3,  jTextField3.getText());
         pst.setString (4,  jTextField4.getText());
         pst.setString (5,  jTextField5.getText());
         pst.setString (6,  jTextField6.getText());
         pst.setString (7,  jTextField7.getText());
         pst.setString (8,  jTextField8.getText());
         pst.setString (9,  jTextField9.getText());
         pst.setString (10, jTextField10.getText());
         pst.setString (11, jTextField11.getText());
         pst.setString (12, jTextField12.getText());
         pst.setString (13, jTextField13.getText());
         pst.setString(15, ((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText());
         pst.execute();
           JOptionPane.showMessageDialog(null,"Book Returned");
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
    }

【讨论】:

  • 这似乎与这个(六岁的)问题无关。如果您对此代码有新问题,可以使用顶部的“”按钮发布。请务必清楚地解释您的问题。
猜你喜欢
  • 2017-08-29
  • 2017-05-15
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多