[JDBC] JDBC용 객체 중 PreparedStatement 알기
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) 만들어진 결과 |
* DAO 클래스 예시