* Statement 와 PreparedStatement의 특징
- 둘 다 sql문을 실행하고 결과를 받아내는 객체 (둘 중에 하나를 이용하면 됨)
- Statement가 PreparedStatement의 부모(상속구조)
* Statement와 PreparedStatement의 차이점
- Statement 는 sql을 바로 전달하면서 실행시키는 객체
(즉, sql문을 완성형태로 만들어 둬야됨! == 사용자가 입력한 값들이 다 채워진 형태로)
1) Connection 객체를 통해 Statement 객체 생성
> stmt = conn.createStatement();
2) Statement 객체를 통해 sql문 실행 결과 받기
> 결과 = stmt.excuteQuery|Update(완성된 sql문);
- PreparedStatement 는 "미완성된 sql문"을 잠시 보관해둘 수 있는 객체
(즉, 사용자가 입력한 값들을 채워두지 않고 각각 들어갈 공간만 미리 확보해놔도됨)
1) Connection 객체를 통해 PreparedStatement 객체 생성
> pstmt = conn.prepareStatement([미]완성된 sql문);
2) pstmt 에 담긴 sql문이 미완성된 상태일 경우 우선 완성시켜야함
> pstmt.setXXX(1,"대체할값");
pstmt.setXXX(2,"대체할값");
..
3) 해당 완성된 sql문을 실행 결과 받기
> 결과 = pstmt.excuteQuery|Update();
***JDBC과정에서 Statement -> PreparedStatement로 변경시
실행할 sql문을 미완성된 형태로 둘 수 있음
==> 미리 사용자가 입력한 값들이 들어갈 수있게 물음표로 공간 확보 ( ? == 홀더)
PreparedStatement 객체 생성후 빈공간(?) 를 사용자가 입력한 값으로 채워 sql문 완성시켜 줘야함
SetString(홀더 순번, 대체할 값) / SetInt(홀더 순번, 대체할값)
예시)
public int insertMember(Member m) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
//실행할 sql문(미완성된 형태로 둘 수 있음)
String sql = "INSERT INTO MEMBER VALUES(SEQ_USERNO.NEXTVAL,?,?,?,?,?,?,?,?,?,SYSDATE)";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC","JDBC");
pstmt = conn.prepareStatement(sql); //애초에 객체 생성시 sql문을 담은채로 생성 (미완성된 sql문)
pstmt.setString(1,m.getUserId());
pstmt.setString(2,m.getUserPwd());
pstmt.setString(3,m.getUserName());
pstmt.setString(4,m.getGender());
pstmt.setInt(5,m.getAge());
pstmt.setString(6, m.getEmail());
pstmt.setString(7, m.getPhone());
pstmt.setString(8,m.getAddress());
pstmt.setString(9, m.getHobby());
result = pstmt.executeUpdate();
if(result>0) {
conn.commit();
}else {
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
'JDBC' 카테고리의 다른 글
JDBC 05_ mvc _JDBC _ Properties, 동적 코딩 (0) | 2022.12.06 |
---|---|
JDBC 04 _ mvc 패턴 이용한 JDBC _ Service, JDBC Template (0) | 2022.12.05 |
JDBC 02 _ mvc 패턴 이용한 JDBC Statement(2) (0) | 2022.12.01 |
JDBC 02 _ mvc 패턴 이용한 JDBC Statement(1) (0) | 2022.12.01 |
JDBC 01 _ delete문 (0) | 2022.11.30 |