본문 바로가기

개발

​prepareStatement를 사용하는 이유 3가지,​prepareStatement 사용법

2014.04.23. 01:09

prepareStatement를 사용하는 이유 3가지

1. 반복해서 실행되는 동일 퀴리의 속도를 증가시키기 위해

prepareStatement() 메소드를 호출하면 DBMS는 미리 SQL 쿼리를 분석해 놓는다 그래서 메서드를 실행할 때에는 곧바로 쿼리를 실행하게 된다. prepareStatement를 사용할때 똑같은 쿼리에서 값만 바꿔준다면 한번의 퀴리 분석과 3번의 실행이 발생한다. 분석을 반복하지 않아서 쿼리 실행 속도가 빠르다.​

2. 간결한 코드를 위해

statment를 사용하면 따옴표가 복잡하게 얽혀 있는 퀴리를 보낼시 오류가 발생할 가능성이 있지만 prepareStatement를 사용하면 비교적 쉽게 수정할수 있고 가독성이 좋아진다.

3. 값 변환을 자동으로 하기 위해

statement를 사용해서 중간에 작은 따옴표가 포함된 값을 지정할때 작은따옴표를 두번 사용하는 형태로 변경해야한다. prepareStatement는 그럴 필요가 없다.

<최범균의 jsp2.2웹 프로그래밍 기초부터 중급까지>

UPDATE department SET score =SCORE+1 where department_keyword like '%java%';

여러 키워드 중에 java를 포함하는 글자가 있으면 score를 더해주는 쿼리를 작성하고, 일단 오라클에서 쿼리가 ​잘 되는지 실행하고 잘된것을 확인 후

String keword = "select * from DEPARTMENT where department_keyword like ?"

pstmt = con.prepareStatement(keword);

pstmt.setString(1,"'%" + keyword + "%'");

이런식으로 ​쿼리를 날렸는데 오류가 발생했다. 혹시나 따옴표가 안날라 가는지 따로 String key = "'%" + keyword + "%'"; 테스트 해봤는데 잘 된다. 


이클립스에서는 AutoCommit이 안된다는 오류가 발생했다. AutoCommit을 다시 설정해 주어도 여전히 안되서

if else로 내가 원하는 값이 나오는지 확인했다.

 


pstmt.setString(1,"'%" + keyword + "%'");

이쪽이 문제여서 책을 다시 찾아봤는데 

pstmt.setString(1,"%" + keyword + "%");

이렇게 바꾸어 주니 잘 돌아간다. 책에 setString()메서드를 호출할 때 알아서 값을 변경해 주기 때문에 작은 따옴표를 처리해줄 필요가 없다고 나와있다.

책을 잘 살펴보자.................​