본문 바로가기

Insight for 기획/서비스 기획

PreparedStatement와 Statement

출처 : http://www.DefineJava.net

PreparedStatement와 Statement


JDBC를 사용한다면 PreparedStatement(이하 pstmt)와 Statement(stmt)를 사용하게 될것이다.
과연 이둘의 차이점은 무엇일까?
필자도 JDBC쪽을 처음 공부할 때 도대체 "째 둘은 이름은 비슷하고 하는일도 비슷한데 왜 나누어져 있을까?" 이런 의문이 들었었다.

우선 두 객체를 사용하여 Result를 가져오는 방법이다.

소스보기

위의 두 코드는 userId가 admin 정보를 가져오는 것이다.
위 코드(코드1)와 아래 코드(코드2) 가장 큰 차이점을 본다면 userId값을 대입할때에 있다.
만약 코드1과 코드2에서 조회해야될 사용자가 100명이라고 한다면 어떻게 될까?

소스 보기


이렇게 소스를 본다면 과연 어느쪽이 더 자원 낭비가 심하게 될까? 당연히 코드2번이 더 심하게 된다.
그 이유는 1번 코드는 미리 쿼리를 준비해 두고 userId값만 교환하여 쿼리를 재활용 하고 있는 반면에 코드2는 그렇지 않기 때문이다.
이렇게 본다면 PreparedStatement Class가 참 좋은 것 같다. 그리고 PreparedStatement는 인젝션을 어느정도 막을 수 있는 코드가 삽입되어 있다.
이렇게만 본다면 PreparedStatement 만 사용해야 겠다고 생각하는 사람들이 많을 것이다.

하지만 PreparedStatement는 분명 Statement 인터페이스를 구현하고 있으면서 또 다른 기능을 포함하고 있다.
이것은 Statement보단 조금더 무겁다는 것을 의미한다.

그렇다면 Statement와 PreparedStatement 속도는 어느정도 차이가 날까?
Java Programming With Oracle JDBC라는 책을 보면 도날드는 오라클 드라이버를 사용하여 데이터를 삽입 할 때 PreparedStatement가 65번 이상 시행 시켰을 때 누적시간 차가
PreparedStatement가 더 작아 진다고 설명되어 있다.

어떤 클래스를 사용하는것은 개발자의 몫이다. 하지만 그 차이점을 알고 사용한다면 조금이나마 더 나은 결과를 나을것이다.