java.sql.SQLException:参数号2不是OUT参数

时间:2013-10-25 05:44:24

标签: java sql

我在运行时遇到错误:

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 ;

请在此代码中指出问题..

4 个答案:

答案 0 :(得分:1)

您正在调用错误的程序。您有程序SaveLabourDetailsHead,而您正在调用

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

更改为,

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

设置字符串参数wage_entered_by

答案 1 :(得分:0)

你的out参数是String类型,但它应该是int。试试这个。

int lastIsertId=cs.getInt(2);

答案 2 :(得分:0)

我遇到了同样的问题,但是输出异常会引起误解,因为根本原因是过程名称。

我键入了数据库中不存在的错误过程。

它没有提供类似“例程不存在”之类的SQL异常,而是给出了:

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

答案 3 :(得分:0)

遇到同样的问题。

在我的情况下,这是一个许可问题。我的应用程序使用的MySQL用户在我正在使用的架构上缺少EXECUTE权限。

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