gpt4 book ai didi

java.sql.SQLException : Parameter index out of range (3 > number of parameters, 这是 2)

转载 作者:行者123 更新时间:2023-11-29 06:21:45 24 4
gpt4 key购买 nike

@WebMethod(操作名称 = "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 $$

如果存在则删除程序 .`getuser_info_or$$
# MySQL 返回一个空结果集(即零行)。`

创建过程 .getuser_info_or``

(IN comp VARCHAR(100),IN 名称 VARCHAR(100),OUT 登录 VARCHAR(100),输出电子邮件 VARCHAR(100))

开始选择 sLogin、sEmailINTO登录,电子邮件来自 ad_userWHERE company = comp OR sName=name;END $$

# MySQL 返回一个空结果集(即零行)。

DELIMITER;

最佳答案

我相信您的问题是您的调用与方法定义不匹配。在您的定义中,您有两个参数:IN comp、IN name、OUT Login、OUT email。所以你的电话应该是:

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

来自 javadocs:

If used, the result parameter must be registered as an OUT parameter.

因此您需要添加这些注册:

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

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

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

关于java.sql.SQLException : Parameter index out of range (3 > number of parameters, 这是 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com