본문 바로가기

Server Oriented/Java & JSP

프로시저 call 시 어떤 Statement 를 사용해야 할까..?

JDBC 버전에 따라서는,

PreparedStatement 로 OUT 파라미터가 없는 Procedure 를 호출했을 때,

return 값이 항상 0 인 경우가 발생하므로..

Exception 이 발생하지 않는 경우에는 성공한 것으로 간주.

Clob 을 DB 에 넣을 때, select for update 를 사용할 때 리턴값을 체크하지 않는 것과 유사.

--------------------------------------------------------------------------------------------------



프로시저를 call 할 때 항상 CallableStatement 를 사용해 왔었는데..

오늘 우연찮게 PreparedStatement 를 사용해도 정상 작동.. ㅠ.

그러면, Statement 를 프로시저를 call 해도 실행은 될듯.


그래서 정리해 보았다.


1. 프로시저를 call 할 때 OutParameter 를 참조해야 한다면,

   CallableStatement 를 사용해야 한다.

   CallableStatement 는 SQL 문장이 실행되었는지 알 수는 없고,

   OutParameter 를 체크해서 실행 결과를 결정한다.


2. 프로시저를 call 하지만 OutParameter 를 참조하지 않는다면,

   PreparedStatement 를 사용. 물론, Statement 를 사용해도 되지만..

   사용자가 입력하는 값을 받아와서 사용하는 Statement 라면 SQLInjection 이 염려되므로,

   Statement 는 사용자 입력값이 아닌 조합인 경우에만 사용.

   update 나 insert 문장을 실행할 것과 같이 프로시저가 실행되었는지는,

   처리된 건수를 가지고 체크하면 된다.

   물론, 처리 건수가 0일 수 있는 환경도 있으므로, Data Flow 에 따라 처리를 해야 겠다.

   때로는 SQLException 이 발생하지 않으면 정상 처리로 간주되기도 한다.


다시 말하면..

프로시저가 던져주는 OutParameter 가 필요한 경우에는,

CallableStatement 를..

프로시저가 던지는 OutParameter 가 필요 없거나, OutParameter 가 없는 프로시저라면..

PreparedStatement 를.. 사용하자.


.Fine.