[JDBC] Statement, PreparedStatement

dhjo ㅣ 2020. 8. 28. 23:03

Statement

-Connection 객체에 의해 프로그램이 리턴되는 개체에 의해 구현되는 일종의 메소드 집합.

-Statement 객체는 Statement 인터페이스를 구현한 객체로, 항상 인수가 없는 Connection 클래스의 createStatement()메소드를 호출함으로써 얻어진다.

-일단 Statement 객체를 생성하면 Statement 객체의 executeQuery() 메소드를 호출하여 SQL 질의를 실행시킬 수 있다.

메소드의 인수로는 SQL 질의 문장을 담은 String 객체를 전달한다.

Statement 객체는 단순한 질의문을 사용할 경우에 좋다.

 

장점 : 사용된 SQL문 전체를 명확히 할 수 있어서 디버깅이 쉽다.

단점 : 사용자가 입력한 데이터가 SQL문장을 구성할 수 있다.

 

Prepared

-PreparedStatement 인터페이스는 Connection 객체의 prepareStatement() 메소드를 사용해서 객체를 생성한다.

PreparedStatement 객체는 SQL 문장이 미리 컴파일되고, 실행시간동안 인수 값을 위한 공간을 확보할 수 있다는 점에서 Statement 객체와는 다르다.

-또한 Statement 객체의 SQL은 실행될 때 매번 서버에서 분석되어야 하는 반면, PreparedStatement 객체는 한번 분석되면 재사용이 용이하다는 장점을 가지고 있다.

- PreparedStatement 인터페이스는 각각의 인수에 대해 위치홀더 (placeholder)를 사용하여 SQL 문장을 정의할 수 있게 해준다. 위치홀더는 물음표(?)로 표현된다. 위치홀더는 SQL 문장에 나타나는 토큰(token)인데, 이것은 SQL 문장이 실행되기 전에 실제 값으로 대체된다. 이러한 방법을 이용하면 특정 값으로 문자열을 연결하는 방법보다 훨씬 쉽게 SQL 문장을 만들 수 있다.
- PreparedStatement 객체는 각각의 SQL 타입을 처리할 수 있는 setXxxx() 메소드를 제공한다. 여기서 Xxx는 해당 테이블의 해당 필드의 데이터 타입과 관련이 있다. 해당 필드의 데이터 타입이 문자열이면 setString() 이 되고 , 해당 필드의 데이터 타입이 int 이면 setInt()가 된다.

- setXxx(num, var) 메소드는 두 개의 매개 변수를 가지고 있다. num은 파라미터 인덱스로서 위치홀더와 대응된다. 첫번째 위치홀더에 대응되면 1이고 다음 위치홀더와 대응부터 1씩 값을 증가시키면 된다. var은 해당 필드에 저장할 데이터 값이다.

 

장점:  파싱을 한번하기에 빠르다.

        따옴표와 자료형을 신경쓰지 않아도 된다.

        사용자가 입력한(sql 구문) 데이터가 변경될 염려가 없다. 

        커넥션에서 생성하면서 SQL문이 DB에 전송되어진다.

 

단점: 오류발생시 변수에 입력되는 값을 알 수 없어서 디버깅이 어렵다.

        한번만 파싱하고 값을 바꾼다.

 

 

'Web > JSP' 카테고리의 다른 글

[JSP] 웹 세션(Session) 이란 ?  (0) 2020.10.04
[JSP] ( java ) 자바 ( Servlet ) 서블릿 이란?  (0) 2020.09.26
[Tomcat] APR 기반 Apache Tomcat Native Error  (0) 2020.09.20
[JSP] request 객체  (0) 2020.07.14