繁体   English   中英

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

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

运行此程序时出现错误:

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 ;

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

您正在调用错误的程序。 你有程序SaveLabourDetailsHead并且你正在打电话

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

改成,

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

设置字符串参数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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM