쿼리문 수행 후 결과 얻기
실행하는 쿼리의 종류에 따라 잘 구분하여 사용해야한다
boolean flag = stmt.execute(); // create, drop
int cnt = stmt.executeUpdate(); // insert, update, delete
ResultSet rs=stmt.executeQuery(); // select
연결끊기
try{
stmt.close();
con.close();
}catch(SQLException se ){
}
쿼리문 생성객체의 특징
Statement :
- 쿼리문을 알지 못하는 객체
- 실행할 때마다 쿼리문을 생성하여 쿼리를 실행
- SQLinjection 공격에 노출(쿼리문을 외부에서 작성하여 입력할수 O)
- 값을 쿼리문에 직접 넣어 사용(쿼리문이 복잡)
- 쿼리문을 한번 실행할 때 효율이 좋다
PreparedStatement :
- 쿼리문을 알고 있는 객체
- 쿼리문을 미리 생성해두고, 값만 나중에 넣어 쿼리를 실행
- SQLinjection 공격에 대한 방어가 된다(쿼리문을 외부에서 입력할수 X)
- bind 변수를 사용하여 값을 나중에 입력한다 (쿼리문이 간단)
- 쿼리문을 여러 번 반복 실행할 때 효율 좋다
CallableStatement :
- Procedure를 호출할 때 사용
- bind 변수를 사용하여 값을 나중에 입력
- registerOutParameter를 사용하여 SQLPlus의 bind 변수를 처리