![](/img/trans.png)
[英]java.sql.SQLException: Parameter number X is not an OUT parameter
[英]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.