2013-03-06 2 views
0

3 개의 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을 cmd를 프롬프트 ... 는하지만 내 JDBC 코드에서 프로 시저를 호출하려고 할 때마다이 오류

을 얻고있다

EXCEPTION

java.sql.SQLException의 : (9)의 파라미터 인덱스 (1, 8)의 범위 밖이다com.mysql.jdbc.CallableStatement.checkIsOutputParam에서 com.mysql.jdbc.CallableStatement.checkParameterIndexBounds (CallableStatement.java:1002) 에서 0 (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

가독성을 높이기 위해 코드 포맷 블록에 프로 시저 코드를 입력하십시오 ... –

+1

분명히 잘못된 것을 볼 수 없습니다. 확실히하기 위해서, 이것은 실제 코드의 cut'n'paste이지 "나는 질문과 비슷한 코드를 작성할 것"이 아닙니다. :) –

답변

1

callableStatement.setString(1, "SomeText");

이 포함 너무. 1 매개 변수를 놓치 셨습니다.

+0

R.J. 감사합니다. 하지만 그때조차도 잘되지 않습니다. 그래서 나는이 과정을 운명에 맡겼다. 나는 이것을 위해 다른 해결책을 분류했다. –

관련 문제