봉봉의 개인 블로그
statement_PreparedStatement_차이점조사 본문
첫번째로 쿼리문을 작성하는 방법입니다.
■ Statement :
Connection.createStatement() 메서드로 Statement 객체를 생성하며, Statement 객체는 파라미터 없는 SQL문 전달에 사용됩니다.
일반적으로 많이 사용하는 방법이고, 쿼리문장을 구성하는 것은 문자열조합을 주로 사용합니다.
■ PreparedStatement :
Connection.prepareStatement() 메서드로 PreparedStatement 객체를 생성합니다.
PreparedStatement 객체는 미리 컴파일 된 SQL문에 사용되는데, 이는 입력 인자로 하나 이상의 파라미터를 가질 수 있으며, PreparedStatement 는 인자 값을 지정하는 메서드들을 갖고 있습니다. 이 값은 문장이 실행될 때 데이터베이스에 전달되며, PreparedStatement 는 Statement 클래스를 확장하므로 Statement 메서드들도 포함하고 미리 컴파일 되어 재사용을 위해 저장되므로 Statement 객체보다 더 효율적일 수 있습니다. 여러 번 반복 사용되는 SQL 문에서는 PreparedStatement 객체를 사용하면 수행 능력이 Statement보다 높다고 할 수 있습니다.
다른 차이점은 입력받을 수 있는 길이라고 볼 수 있습니다.
예를 들어서 게시판을 생각해 보겠습니다.(DB는 오라클로 가정합니다.)
글내용을 저장하는 곳을 varchar2(4000)로 만들어 놓겠습니다.
그리고 집어 넣을때에는 PreparedStatement를 사용을 하겠습니다.
이 때에 한글 4000byte를 집어넣지 못하는 문제가 발생합니다.
물론 해결방법도 있긴 하지만 일단은 못 집어 넣습니다.
하지만 Statement는 집어 넣을 수 있지요;;;
성능적으로는 PreparedStatement가 좋긴 합니다.
고정된 쿼리를 반복적으로 처리해야 한면 더더욱 성능이 좋겠지요.
하지만 DB서버의 캐싱용량은 한정되어 있기때문에 남발을 한다면 역효과가 나올 수 있습니다.
Statement가 좀 더 효율적인 경우
동적인 쿼리문을 사용한다면 매번 조건절이 틀려지게 됨으로 statement가 유리할 수 있습니다.
즉 캐싱의 장점을 잃어버립니다. 또, 동적 쿼리문일 경우 코딩도 Statement가 훨신 편합니다.
결론
동적으로 쿼리문이 생성된다면 Statement를 사용하고, 쿼리문이 변하지 않는다면 PreparedStatement를 사용하면 좋을 것 같습니다.
'관련 지식' 카테고리의 다른 글
자바(JAVA) 형 변환(String과 int) (0) | 2017.05.06 |
---|---|
String 클래스의 유용한 메소드(함수)들 (4) | 2017.05.06 |
DDL_DCL_DML조사 (0) | 2017.04.24 |
setAttribute getAttribute조사 (0) | 2017.04.19 |
java Object data type조사 (0) | 2017.04.19 |