![](/img/trans.png)
[英]MySQL Java stored procedure gives error "Parameter index of 1 is out of range"
[英]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.