java.sql.SQLException: параметр номер 2 не является параметром OUT

Я получаю сообщение об ошибке при выполнении этого:

1. cs = getCon1().prepareCall("{CALL SaveLabourWageDetails(?,?)}");

2. cs.setString(1, user.getUserId());

3. cs.registerOutParameter(2, java.sql.Types.INTEGER); //<--- ERROR at this line

4. cs.execute();

5. String lastIsertId=cs.getString(2);

Хранимая процедура:

CREATE

    PROCEDURE `cheque_alert`.`SaveLabourDetailsHead`(IN wage_entered_by VARCHAR(10),OUT LastInsertId INT)

    BEGIN
    INSERT INTO `cheque_alert`.`labour_wage_head`
            (
             `wage_entered_by`,
             `entered_date_time`)
    VALUES (wage_entered_by,
         NOW());

          SELECT LAST_INSERT_ID() INTO LastInsertId;

    END$$

DELIMITER ;

Пожалуйста, укажите на проблему в этом коде.

5 ответов

Решение

Вы вызываете неправильную процедуру. У вас есть процедура SaveLabourDetailsHead и ты звонишь

1. cs = getCon1().prepareCall("{CALL SaveLabourWageDetails(?,?)}");  
                                         ↑  

Изменить на,

1. cs = getCon1().prepareCall("{CALL SaveLabourDetailsHead(?)}");  

Установить параметр String wage_entered_by,

Ваш параметр out имеет тип String, но он должен быть int. Попробуйте это.

int lastIsertId=cs.getInt(2);

У меня была та же проблема, но исключение вывода вводит в заблуждение, поскольку основной причиной было имя процедуры.

Я ввел неверную процедуру, которой не было в базе данных.

Вместо предоставления исключения SQL типа "подпрограммы не существует" он дал:

java.sql.SQLException: Parameter number 2 is not an OUT parameter.

Просто была такая же проблема.

В моем случае это была проблема с разрешением. Пользователь MySQL, который использует мое приложение, не имеетEXECUTE разрешение на схему, над которой я работаю.

GRANT EXECUTE ON <your_schema>.* TO '<your_user>'@'localhost';
FLUSH PRIVILEGES;

Я гонялся за этим целую вечность, а потом обнаружил, что пропустил и подчеркивание в названии хранимой процедуры! У меня даже не было процедуры с неправильным названием.

Какое глупое сообщение об ошибке!

«Параметр неправильный — ох, кстати, этой процедуры не существует»

Другие вопросы по тегам