2013-03-06 38 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

相關問題