簡體   English   中英

從Java(Eclipse)調用MySQL存儲過程中的OUT參數錯誤

[英]OUT Parameter Error in Calling MySQL Stored Procedure from Java (Eclipse)

我試圖從Eclipse中的Java代碼調用MySql存儲過程,但是出現以下錯誤。 存儲過程已編譯,沒有任何錯誤。

導入語句:

import java.sql.CallableStatement;    
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

這是Java代碼段:

>cStmt = (CallableStatement) conn.prepareCall("{ call getEmpName(?,?)}");

>cStmt.setString(1, "xxxyyyzzz");

>cStmt.registerOutParameter(2, Types.INTEGER);

>cStmt.execute();

下面給出的是存儲過程

>USE `mcaSchema`;
>DROP procedure IF EXISTS `getEmpName`;
>DELIMITER $$
>USE `mcaSchema`$$
>CREATE DEFINER=`root`@`localhost` PROCEDURE `getEmpName`(IN empID int,OUT eName varchar(30)) 
>BEGIN
>>  select ename from mcaSchema.emp where empno = empID; 
>END$$
>DELIMITER ;

在此處輸入圖片說明

請幫助我弄清楚我在做什么錯。 如果這看起來有點天真,請原諒我。 我一直在尋找解決方案,但尚未解決。 ...

嘗試:

/* CODE FOR DEMONSTRATION PURPOSES */
DROP PROCEDURE IF EXISTS `getEmpName`;

DELIMITER $$

CREATE PROCEDURE `getEmpName`(IN `empID` VARCHAR(30), OUT `eName` VARCHAR(30)) 
BEGIN
    SELECT CONCAT('NAME: ' , `empID`) INTO `eName`;
END$$

DELIMITER ;
/* CODE FOR DEMONSTRATION PURPOSES */
/* CODE FOR DEMONSTRATION PURPOSES */
...
cStmt = con.prepareCall("{ call `getEmpName`(?, ?) }");
cStmt.setString(1, "MYNAME");
cStmt.registerOutParameter(2, Types.VARCHAR);
boolean hadResults = cStmt.execute();
while (hadResults) {
   rs = cStmt.getResultSet();
   hadResults = cStmt.getMoreResults();
}
String outputValue = cStmt.getString(2);
...
/* CODE FOR DEMONSTRATION PURPOSES */

更新

DROP PROCEDURE IF EXISTS `getEmpName`;

DELIMITER $$

CREATE PROCEDURE `getEmpName`(IN `p_empID` INT, OUT `p_eName` VARCHAR(30)) 
BEGIN
    SELECT `ename` INTO `p_eName`
    FROM `mcaSchema`.`emp`
    WHERE `empno` = `p_empID`; 
END$$

DELIMITER ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM