[Java] 자바 이클립스 JDBC 5. Statement와 PreparedStatement 비교
Statement와 PreparedStatement의 차이
1) 보안
Statement:
- 사용자가 입력한 값을 가지고 SQL문을 만들기 때문에 보안이 취약하다.
- 즉 악의적으로 SQL의 일부를 포함하는 값을 입력할 수 있다.
PreparedStatement
- ?(in-parameter) 자리에 임의의 SQL문을 삽입할 수 없다.
- 삽입해봐야 단순 문자열로 취급한다.
- 그래서 보안 문제를 발생시키지 않는다.
2) 바이너리 데이터
Statement
- 문자열로 SQL문을 만들기 때문에 바이너리 데이터를 삽입할 수 없다.
PreparedStatement
- ?(in-parameter) 자리에 바이너리 데이터를 삽입할 수 있다.
3) 코드의 가독성
Statement
- + 연산자를 사용하여 컬럼의 값을 연결하는 식으로 문자열을 만들기 때문에,
컬럼의 개수가 많으면 문자열을 붙이는 코드도 산만해지고 복잡해진다.
PreparedStatement
- setXxx()를 사용하여 값을 넣기 때문에 코드가 간결하다.
4) 실행속도
서버에 SQL문을 전달하기 전에 서버에서 원하는 형식으로 변환하여 보낸다.
단순히 SQL을 한 번만 실행한다면 Statement나 PreparedStatement 둘 다 속도가 같다.
그러나 같은 SQL문을 값을 바꿔가면서 여러 번 실행할 경우,
PreparedStatement는 SQL문을 컴파일한 후 값만 넣어서 보내기 때문에 속도가 빠르다.
Statement는 executeXxx()를 실행할 때마다 SQL문을 매번 컴파일하기 때문에 속도가 느리다.
JDBC 프로그래밍: PreparedStatement 객체 사용 후
- 더하기 연산자를 사용하여 SQL문을 만드는 대신,
in-parameter '?' 를 사용하여 SQL 문을 만든다.
JDBC SQL에서 PreparedStatement의 사용 예제
}
'Programming > java' 카테고리의 다른 글
[Java] 인터페이스 (interface)의 기본 문법과 꼭 지켜야 하는 규칙 (1) | 2017.05.30 |
---|---|
[Java] 추상 클래스 (abstract class)와 추상 메서드(abstract method)의 개념 (0) | 2017.05.29 |
[Java] 이클립스 JDBC 4. 특정 DBMS에 종속되는 것을 막기 (0) | 2017.05.29 |
[Java] 이클립스 JDBC 3. try ~ catach~ 를 이용하여 자원 해제시키기 (0) | 2017.05.29 |
[Java] 이클립스 JDBC 2. java.sql 패키지의 주요 인터페이스 (규칙) (0) | 2017.05.29 |