PreparedStatement vs Statement

yh_lee·2022년 7월 7일
0

Database

목록 보기
8/8

PreparedStatement vs Statement

PreparedStatement와 Statement의 가장 큰 차이점은 캐시(cache) 사용여부이다. PreparedStatement를 사용하면 최초 한 번만 아래 3단계를 거치고 캐시에 담아 재사용하고, Statement는 아래 3단계를 쿼리를 수행할 때마다 매번 반복한다. 만약 동일한 쿼리를 반복적으로 수행하면 PreparedStatement가 데이터베이스에 훨씬 적은 부하를 주고 성능이 좋다.

과정

1) 쿼리 문장 분석
2) 컴파일
3) 실행

PreparedStatement

데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 쿼리를 높은 효율성으로 반복적으로 실행하기 위해 사용되는 기능이다.

String query = "SELECT name, memo FROM TABLE WHERE num = ?"
PreparedStatement pstmt = conn.creadteStatement(query)
pstmt.setInt(1,num);
ResultSet rst = pstmt.executeQuery(query);

보통 조건절과 함께 사용되고, '?' 부분에만 변화를 주어 SQL을 수행하기 때문에 한눈에 어떤 SQL 문인지 파악하기 어렵다. 해당 인자만 받아서 처리하는 구조로이다. 동일한 쿼리의 경우 인자만 달라지게 되므로 매번 컴파일 하지 않아도 된다.

PreparedStatement를 사용해야 하는 경우

  • 사용자 입력값으로 쿼리를 생성하는 경우
  • 쿼리 반복 수행 작업일 경우

Statement

excuteQuery()나 excuteUpdate()를 실행하는 시점에 파라미터로 SQL 문을 전달하는데 이때 전달되는 SQL문은 완성된 형태로 어떤 SQL 문인지 파악하기 쉽다. 하지만 SQL 문을 수행하는 과정에서 매번 컴파일을 하기 때문에 성능상 이슈가 있다.

String query = "SELECT name, memo FROM TABLE WHERE num = " + num
Statement stmt = conn.creadteStatement()
ResultSet rst = stmt.executeQuery(query);

Statement를 사용해야 하는 경우

  • Dynamic SQL을 사용하는 경우
    Dynamic SQL을 사용한다면 배번 조건절이 달라지게 되어 Statement가 나은 선택이다. 즉 캐싱의 장점을 잃어버린다.
profile
공부기록

0개의 댓글