JDBC

[JDBC] JDBC용 객체 중 PreparedStatement 알기

나는 개발자 2021. 2. 23. 18:57
TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.

 

 

 

 

 

* JDBC용 객체

- [Prepared] Statement

: 해당 DB에 SQL문을 전달하고 실행한 후 결과를 받아내는 객체

 

 

 

Statement VS PreparedStatement

Statement [부모] :

SQL문을 바로 실행하는 객체

=> SQL문이 완성된 형태로 세팅되어있어야 한다.

> Connection 객체를 가지고 Statement 객체 생성 : stmt = conn.createStatement();

> executeXXXX 메소드를 이용해서 sql문을 전달하면서 실행 : stmt.executeXXX(sql);

PreparedStatement [자식] :

SQL문을 바로 실행하지 않고 잠시 보관해둔 후 사용

해당 SQL문을 실행하기 전에 완성형태로 만든 후 실행한다.

> Connection 객체를 가지고 PreparedStatement 객체 생성 : pstmt = conn.preparedStatement(sql);

> 현재 담긴 sql문이 미완성된 sql문일 경우 빈 공간들을 실제 값으로 채워주는 과정 필수

   pstmt.setString(1, "실제값");

   pstmt.setInt(2, "실제값");        . . .

> executeXXXX 메소드를 이용해서 실행 : pstmt.executeXXX( );

 

 

 

 

 

 

** JDBC [PreparedStatement] 처리순서

순서

처리

내용

1

JDBC driver 등록

해당 DBMS가 제공하는 클래스 등록

2

Connection 객체 생성

접속하고자하는 DB정보를 입력해서 DB에 접속하면서 생성

3-1

PreparedStatement 객체 생성

Connection객체를 이용해서 생성

3-2

미완성된 sql문 채우기

 

4

SQL문 전달하면서 실행

Statement 객체를 이용해서 SQL문 실행

            > SELECT문일 경우 - executeQuery메소드를 이용해서 실행

            > DML문일 경우 - executeUpdate메소드를 이용해서 실행

5

결과 받기

            > SELECT문일 경우 - ResultSet 객체 ( 조회된 데이터가 담겨있는 객체) -> 6-1

            > DML문일 경우 - int(처리된 행 수 ) -> 6-2

6-1

SELECT문일 경우

Result Set에 담겨있는 모든 데이터를 하나씩 뽑아서 vo객체에 담기

6-2

DML문일 경우

트랜젝션 처리 (성공이면 commit / 실패면 rollback)

7

사용된 JDBC용 객체 반납

close -> 생성된 역순으로 닫아주기

8

결과 반환 (Controller)

            > SELECT문일 경우 - 6-1) 만들어진 결과
            > DML문일 경우 - int (처리된 행 수)

 

 

 

 

 

* DAO 클래스 예시