java.sql.SQLException: индекс параметра вне диапазона (3> число параметров, которое является 2)

0

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

Теги:
web-services

1 ответ

3

Я считаю, что ваша проблема заключается в том, что ваш вызов не соответствует определению метода. В вашем определении у вас есть два параметра: IN comp, IN name, OUT Login, OUT email. Таким образом, ваш вызов должен быть:

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);
  • 0
    Спасибо. Спасибо за ваш ответ ... Теперь gwtting эта ошибка .. любая идея об этом .. java.sql.SQLException: ResultSet от UPDATE. Нет данных. в 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)
  • 0
    Это потому, что ваша процедура не создает набор результатов. Вам нужно получить значения из заявления. Я обновил свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню