我有一個要求,我必須調用具有三個IN參數和6個OUT參數的MySql存儲過程。java.sql.SQLException:參數索引9超出範圍(1,8)
程序
DELIMITER $$
DROP PROCEDURE IF EXISTS GET_PRODUCT_INFO $$
CREATE PROCEDURE GET_PRODUCT_INFO(IN productName varchar(25),
IN divisionID int(11), IN productQuantity int(11),
OUT Price double, OUT price_without_vat double,
OUT vat double, OUT Quantity int, OUT ProductsId int, OUT ExpDate date)
BEGIN
select I.quantity into Quantity from ProductInventory I
where I.pname=productName and I.divid=divisionID ;
if Quantity > productQuantity THEN
select P.productID,P.price,P.price_without_vat,P.vat, I.quantity,P.ExpiryDate
into ProductsId,Price,price_without_vat,vat,Quantity,ExpDate
from product P,ProductInventory I
where P.pname=productName and I.pname=productName
and P.orgid=divisionID and I.divid=divisionID ;
update productinventory
set quantity=(quantity-productQuantity)
where pname=productName and divID=divisionID;
END IF;
END $$
call GET_PRODUCT_INFO('Crocin',1,2,@Price,@price_without_vat,@vat,@Quantity,@ProductsId,@ExpiryDate)$$
在這裏,我能夠檢索的記錄MySQL的命令提示符... 但每當我試圖從我的JDBC代碼調用程序正在此錯誤
例外
java.sql.SQLException中:9參數索引超出範圍(1,8) 在com.mysql.jdbc.CallableStatement.checkParameterIndexBounds(CallableStatement.java:1002) 在com.mysql.jdbc.CallableStatement.checkIsOutputParam(CallableStatement.java:971)
callableStatement = (CallableStatement)con.prepareCall("{call GET_PRODUCT_INFO(?,?,?,?,?,?,?,?,?)}");
callableStatement.setInt(2, 1);
callableStatement.setInt(3, quantity);
callableStatement.registerOutParameter(4, Types.DOUBLE);
callableStatement.registerOutParameter(5, Types.DOUBLE);
callableStatement.registerOutParameter(6, Types.DOUBLE);
callableStatement.registerOutParameter(7, Types.INTEGER);
callableStatement.registerOutParameter(8, Types.INTEGER);
callableStatement.registerOutParameter(9, Types.DATE);--->Exception here
請將程序代碼放在代碼格式塊中以便更好閱讀... – 2013-03-06 08:06:19
我看不到任何明顯錯誤。只是爲了確定,這是從真實代碼中刪除「不」,而不是「我會爲這個問題編寫類似的代碼」的東西? :) – 2013-03-06 09:13:29