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

时间:2010-06-10 11:19:33

标签: java mysql web-services

@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 ;

1 个答案:

答案 0 :(得分:3)

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

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

来自javadocs:

  

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

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

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

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

String login = cs.getString(3);
String email = cs.getString(4);
相关问题