简体   繁体   English

从Java(Eclipse)调用MySQL存储过程中的OUT参数错误

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

I am trying to call a MySql stored procedure from the Java code in Eclipse but I get the following error. 我试图从Eclipse中的Java代码调用MySql存储过程,但是出现以下错误。 The stored procedure compiled without any error. 存储过程已编译,没有任何错误。

Import statements: 导入语句:

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

Here's the java code snippet: 这是Java代码段:

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

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

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

>cStmt.execute();

Given below is the Stored procedure 下面给出的是存储过程

>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 ;

在此处输入图片说明

Please help me figure out what wrong I am doing. 请帮助我弄清楚我在做什么错。 Pardon me if it seems a lil' naive. 如果这看起来有点天真,请原谅我。 I've looked around for solution, but haven't been able to resolve it . 我一直在寻找解决方案,但尚未解决。 ... ...

Try: 尝试:

/* 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 */

UPDATE 更新

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