【问题标题】:java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2)java.sql.SQLException:参数索引超出范围(3 > 参数个数,即 2)
【发布时间】:2010-06-10 11:19:32
【问题描述】:

@WebMethod(operationName = "SearchOR")

  public  SearchOR getSearchOR (@WebParam(name = "comp")
  String comp, @WebParam(name = "name")
 String name) {
            //TODO write your implementation code here:
     SearchOR ack = null;

    try{
     String simpleProc = "{ call getuser_info_or(?,?)}";
        CallableStatement cs = con.prepareCall(simpleProc);
        cs.setString(1, comp);
        cs.setString(2, name);
        **ResultSet rs = cs.executeQuery();**


      while (rs.next()) {

           ve.add(rs.getString(1));
           ve.add(rs.getString(2));

        }}catch ( Exception e) {
        e.printStackTrace();
        System.out.print(e);
    }
    return ack;
}

我在加粗的部分出现错误。它指向那个位置。我的查询是 这里:

DELIMITER $$

DROP PROCEDURE IF EXISTS.`getuser_info_or$$ # MySQL 返回一个空结果集(即零行)。`

CREATE PROCEDURE.getuser_info_or``

( IN comp VARCHAR(100), IN name VARCHAR(100), OUT Login VARCHAR(100), OUT email VARCHAR(100) )

BEGIN SELECT sLogin, sEmail INTO Login, email FROM ad_user WHERE company = comp OR sName=name; END $$

# MySQL returned an empty result set (i.e. zero rows).

DELIMITER ;

【问题讨论】:

    标签: java mysql web-services


    【解决方案1】:

    我相信您的问题是您的调用与方法定义不匹配。在您的定义中,您有两个参数:IN comp、IN 名称、OUT 登录、OUT 电子邮件。所以你的电话应该是:

    String simpleProc = "{ call getuser_info_or(?, ?, ?, ?)}";
    

    来自 javadocs:

    如果使用,结果参数必须是 注册为 OUT 参数。

    所以您需要添加这些注册:

    cs.registerOutParameter(3, Types.VARCHAR);
    cs.registerOutParameter(4, Types.VARCHAR);
    

    定义的存储过程不会为检索到的数据创建结果集,而是将其放在输出参数中。要获取它们,您需要通过可调用语句访问它们:

    String login = cs.getString(3);
    String email = cs.getString(4);
    

    【讨论】:

    • 谢谢。感谢您的回复...现在 gwtting 这个错误..关于它的任何想法.. java.sql.SQLException: ResultSet 来自更新。没有数据。在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910) 在 com.mysql.jdbc.ResultSet.next(ResultSet.java:6450) 在 WS.TestDB.getSearchAnd(TestDB.java:85) 在 WS。 TestDB.main(TestDB.java:98)
    • 这是因为您的过程没有创建结果集。您需要从语句中获取值。我已经更新了我的答案。
    • 您好,非常感谢 jessup 想提出更多疑问。如果可能的话,您可以分享您的邮件 ID 或 IM 之类的东西,这样对我会更有帮助。有很多疑问...: -(
    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 2018-08-09
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多