Statement 객체는 SQL문 작성을 문자열 형태로 작성한다. 하지만 PreparedStatement 객체는 IN 매개변수를 통해 SQL문을 작성한다. 또한, IN 매개변수는 SQL문장에서 하나의 완전한 문자열로 취급된다. SQL문에 LIKE 키워드를 사용하여 SQL문을 작성 할 때 패턴을 정의 하는 방법에서 이 두개는 다른 형태로 SQL문을 정의한다.
만약, 다음과 같은 쿼리문이 있다면
위의 쿼리문은 해당 테이블에서 이름이 '홍'으로 시작되는 모든 레코드를 추출하는 쿼리문이다. 이 부분을 데이터베이스에 명령창에서 실행하면 완벽하게 추출된 데이터를 반환한다.
하지만, PreparedStatement 객체를 사용하여 다음과 같이 작성하면 오류가 발생한다.
String sql = "SELECT * FROM table WHERE name LIKE '?';
pst = conn.prepateStatement(sql);
pst.setString(1, "홍%");
출력값을 하나도 얻을 수 없다. 이유는 PreparedStatement 객체는 IN 매개변수를 완전한 문자열로 보기 때문에 데이터베이스에서 '홍%' 값을 패턴으로 보든 것이 아니라 그 자체의 문자열로 본다. 즉, 테이블에서 '홍%' 이란 이름을 가진 레코드가 있나를 검색한다.
따라서 패턴을 입력하고 싶을 때 Statement 객체를 사용하여 SQL문을 작성한다.
stm = conn.createStatement();
rs = stm.executeQuery(sql);
이런 방식으로 쿼리문을 작성하여 실행하면 원하는 결과를 얻을 수 있다.
PreparedStatement 객체의 IN 매개변수를 사용하여 SELECT 같은 SQL문을 대신할 수 없다.
다음과 같은 문장도 오류를 발생한다.
String sql = "SELECT * FROM table WHERE ? = ?";
pst = conn.prepateStatement(sql);
pst.setString(1, "name");
pst.setString(2, "홍길동");
이럴 경우에는 Statement 객체를 사용해야 한다.
stm = conn.createStatement();
rs = stm.executeQuery(sql);
'자바(Java) > JAVA 2SE' 카테고리의 다른 글
java.text.SimpleDateFormat - 날짜 형태 (0) | 2010.01.04 |
---|---|
자바의 I/O 스트림 (0) | 2009.12.27 |
Java 시스템 변수 설정 (0) | 2009.11.19 |
JDK 설치 방법 - J2SE, J2EE 개발 가능 (0) | 2009.11.19 |
JAVA 개발 환경 (0) | 2009.11.19 |