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.
'Server Oriented > Java & JSP' 카테고리의 다른 글
jsp 쿠키값 추출 (0) | 2018.05.17 |
---|---|
MMS 본문 링크 타고 들어온 JSP 에서 프로세스를 중단하고자 할 때.. (0) | 2018.04.27 |
크롬에서 https 를 실행해도 안전함이 안 뜰 때.. '사이트 정보 보기' (2) | 2017.06.05 |
OWASP Top 10 - 2017 (0) | 2017.05.25 |
하나의 .jsp 에서 request 와 getParameter()/getAttribute()/setAttribute() (0) | 2017.02.13 |