엄지월드

java.sql.SQLSyntaxErrorException: (conn=1103) Incorrect number of arguments for PROCEDURE INSERT_BOARD; expected 9, got 8 본문

java/JSP

java.sql.SQLSyntaxErrorException: (conn=1103) Incorrect number of arguments for PROCEDURE INSERT_BOARD; expected 9, got 8

킨글 2022. 12. 18. 11:52

상황

프로시저를 설정하고 out 값을 자바에서 받아서 처리하려고 하니 위와 같이 에러가 발생했었다.

create
    definer = root@localhost procedure INSERT_BOARD(IN p_title varchar(100), OUT total int)
BEGIN 
    START TRANSACTION; 
        INSERT INTO boards
            (btitle)
        VALUES (p_title);

        SELECT LAST_INSERT_ID() INTO total;

        UPDATE boards
        SET parentNo = total
        WHERE bno = total;
    
    COMMIT;
END;

 

원인

프로시저에서는 OUT 값을 설정해주지만, java에서 값을 받도록 처리하지 않아서 발생하는 에러였다.

나는 cstmt.executeUpdate(); 을 통해서 out 값이 전달될 것이라 생각했었는데, 경기도오산이었다.

처리 방법

java에서 cstmt 부분에 registerOutParameter을 설정해준다.

주의점은 cstmt.getInt(2) 할 때에 숫자를 registerOutParameter 숫자와 맞춰주어야 한다.

public int callInsert(){
        CallableStatement cstmt = null;
        try{
            cstmt = con.prepareCall("{call INSERT_BOARD(?, ?)}");
            cstmt.setString(1, "title");
            cstmt.registerOutParameter(2, Types.INTEGER);
            cstmt.executeUpdate();

            int result = cstmt.getInt(2);

            return result;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

'java > JSP' 카테고리의 다른 글

동시 요청 - 멀티 쓰레드  (0) 2023.01.08
서블릿 컨테이너  (0) 2023.01.08
동적 쿼리 like 처리  (0) 2022.12.16
jsp eclipse 템플릿 변경  (0) 2022.12.14
'\ufeff'  (0) 2022.12.05
Comments