簡體   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