2013-03-06 73 views
0

我有一个要求,我必须调用具有三个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 
+0

请将程序代码放在代码格式块中以便更好阅读... – 2013-03-06 08:06:19

+1

我看不到任何明显错误。只是为了确定,这是从真实代码中删除“不”,而不是“我会为这个问题编写类似的代码”的东西? :) – 2013-03-06 09:13:29

回答

1

callableStatement.setString(1, "SomeText");

包括此太。你错过了1参数。

+0

谢谢R.J.但即使如此它没有工作。所以我把这个程序留给了它的命运。我为此解决了不同的解决方案。 – 2013-03-28 09:32:41