2014-11-21 2 views
1

JDBC를 사용하여 저장 프로 시저를 실행하려고, 나는이 오류가 과거를 얻을 수없는 것 매개 변수,파라미터 번호 1은 OUT의

java.sql.SQLException: Parameter number 1 is not an OUT parameter

public static void SP1() throws SQLException, IOException { 

    try { 

     stmt = conn.createStatement(); 
     stmt.executeUpdate("DROP PROCEDURE IF EXISTS sp1;"); 

     stmt.executeUpdate("CREATE PROCEDURE sp1(OUT cName VARCHAR(20))" 
       + "SELECT CuratorName FROM curator " 
       + "WHERE CuratorPhone = \"90394857\" INTO cName;"); 

     conn.commit(); 

     System.out.println("Sp1 created"); 

     CallableStatement cs3 = conn.prepareCall("{call sp1(?)}"); 
     cs3.registerOutParameter(1, java.sql.Types.VARCHAR); 
     cs3.execute(); 
     String result = cs3.getString("cName"); 
     System.out.println("Result from sp1:" + result); 

    } catch (Exception e) { 

     System.out.println(e); 
    } 

} 
+0

sproc가 독립 실행 형 (즉, Java 외부)입니까? –

+0

어떤 DBMS를 사용하고 있습니까? –

+0

localhost에서 실행중인 MySQL을 사용하고 있습니다. Netbeans IDE에서 모든 것을 실행합니다. – TonyQuig

답변

-2

아니다 공유 한 코드를 살펴보면 Call 문은 다음과 같아야합니다.

CallableStatement cs3 = conn.prepareCall("{call sp1(?)}"); 
    cs3.setString(1, java.sql.Types.VARCHAR); 

매개 변수는 IN 매개 변수로 설정해야합니다.

저장 프로 시저 정의에 OUT 매개 변수가 포함 된 경우 호출 문을 수정해야합니다.

CallableStatement cs3 = conn.prepareCall("{? = call sp1()}"); 
     cs3.registerOutParameter(1, java.sql.Types.VARCHAR); 

어쨌든 프로 시저 정의를 공유하면 명확하게 나타납니다.

+0

하나의 매개 변수가 있으므로 두 번째 옵션을 시도했습니다. 이제이 오류가 발생합니다 : java.lang.NullPointerException – TonyQuig

+2

'cs3.setString (1, java.sql.Types.VARCHAR);'는 문자열 매개 변수에 정수를 지정하는 구문 오류입니다. 문자열 값을 지정합니다. 그리고이 질문은 '외출'에 관한 것이므로 당신의 대답의 일부로 이해가되지 않습니다. 둘째,'{? = call sp1()}'이스케이프는 'OUT'매개 변수가 아니라 단일 ** return ** 값을 가진 저장 프로 시저에 대한 것입니다. –