PreparedStatement와 Statement의 가장 큰 차이점은 캐시(cache) 사용여부이다. PreparedStatement를 사용하면 최초 한 번만 아래 3단계를 거치고 캐시에 담아 재사용하고, Statement는 아래 3단계를 쿼리를 수행할 때마다 매번 반복한다. 만약 동일한 쿼리를 반복적으로 수행하면 PreparedStatement가 데이터베이스에 훨씬 적은 부하를 주고 성능이 좋다.
1) 쿼리 문장 분석
2) 컴파일
3) 실행
데이터베이스 관리 시스템(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 문인지 파악하기 어렵다. 해당 인자만 받아서 처리하는 구조로이다. 동일한 쿼리의 경우 인자만 달라지게 되므로 매번 컴파일 하지 않아도 된다.
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);