Statement와 Prepared Statement
- SQL문을 실행할 수 있는 객체
- 가장 큰 차이점은 캐시 사용 여부
1) SQL 실행 단계
(1) 쿼리 문장 분석
(2) 컴파일
(3) 실행
2) Statement
String sqlstr = "SELECT name, memo FROM TABLE WHERE name = " + num
Statement stmt = conn.credateStatement();
ResultSet rst = stmt.executeQuery(sqlstr);
- 쿼리문을 수행할 때마다 SQL 실행 단계 1) ~ 3)의 과정을 거침
- SQL문을 수행하는 과정에서 매번 컴파일을 하게 때문에 성능상 이슈 발생
- 실행되는 SQL 문을 확인 가능
3) Prepared Statement
String sqlstr = "SELECT name, memo FROM TABLE WHERE num = ?"
PreparedStatement stmt = conn.preparedStatement();
stmt.setInt(1, num);
ResultSet rst = stmt.executeQuery(sqlstr);
- 컴파일이 미리 되어있기 때문에 Statement에 비해 좋은 성능
- 특수 문자를 자동으로 파싱해주기 때문에 SQL Injection 같은 공격을 막을 수 있음
- '?' 부분에만 변화를 주어 쿼리문을 수행하므로 실행되는 SQL문을 파악하기 어려움
4) Prepared Statement를 사용해야하는 경우
(1) 사용자 입력값으로 쿼리문을 실행하는 경우
- 특수 기호가 들어오더라도 알아서 파싱해주므로 이로인한 에러를 막을 수 있음
(2) 쿼리 반복 수행 작업일 경우
5) Statement를 사용해야하는 경우
(1) Dynamic SQL
- 매번 조건절이 틀려지게 되므로, 캐싱의 장점을 잃어버림
'CS > Database' 카테고리의 다른 글
[GreenplumDatabase 교육 1일차] (1) | 2022.12.13 |
---|---|
[데이터베이스] 객체관계매핑(ORM, Object-Relational Mapping) (0) | 2020.06.24 |
[데이터베이스] 인덱스(Index) (0) | 2020.06.24 |
[데이터베이스] 샤딩(Sharding) (0) | 2020.06.24 |
[데이터베이스] 파티셔닝(Partitioning) (0) | 2020.06.24 |
댓글