-
JDBC - PreparedStatement 사용servlet/JDBC 2022. 2. 4. 00:25728x90반응형
PreparedStatement 사용
Statement 사용 시 불편한 점을 해결해준다. 또한 속도가 더 빠르다.
PreparedStatement pstmt = null;
- Statement 인터페이스를 상속받는 하위 인터페이스
ResultSet rset = null;
- SELECT 결과 집합을 받아올 용도의 인터페이스
pstmt = con.prepareStatement("SELECT EMP_ID, EMP_NAME FROM EMPLOYEE WHERE EMP_ID = ?"); pstmt.setString(1, empId);
- Statement 인터페이스와는 달리 PreparedStatement 인터페이스는 생성 시 쿼리문도 전달
- 위치홀더에 해당 값을 setString(위치홀더인덱스, 변수)로 세팅 (위치홀더인덱스는 1부터 시작한다)
rset = pstmt.executeQuery();
- executeQuery()로 쿼리문 실행하고 결과를 ResultSet으로 반환 받음
if(rset.next()) { System.out.println(rset.getString("EMP_ID") + ", " + rset.getString("EMP_NAME")); }
- 결과 집합을 순서대로 해당 값들을 가져올 수 있다.
- ResultSet의 커서 위치를 하나 내리면서 행이 존재하면 true 존재하지 않으면 false를 반환
전체 코드
public class Application2 { public static void main(String[] args) { /* 1. Connection 생성 */ Connection con = getConnection(); PreparedStatement pstmt = null; ResultSet rset = null; String empId = "200"; try { /* 2. PreparedStatement 생성 - 쿼리문 전달하며 */ pstmt = con.prepareStatement("SELECT EMP_ID, EMP_NAME FROM EMPLOYEE WHERE EMP_ID = ?"); pstmt.setString(1, empId); /* 3. executeQuery()로 쿼리문 실행하고 결과를 ResultSet으로 반환 받음 */ rset = pstmt.executeQuery(); /* 4. ResultSet에 담긴 결과 값을 컬럼 이름을 이용해 꺼내오기 */ if(rset.next()) { /* next() : ResultSet의 커서 위치를 하나 내리면서 행이 존재하면 true 존재하지 않으면 false를 반환 */ System.out.println(rset.getString("EMP_ID") + ", " + rset.getString("EMP_NAME")); } } catch (SQLException e) { e.printStackTrace(); } finally { /* 5. 사용한 자원 반납 */ close(rset); close(pstmt); close(con); } } }
참고
Statement는 SQL injection에 취약하지만
PreparedStatement는 내부적으로 SQL injection을 막아준다.728x90반응형'servlet > JDBC' 카테고리의 다른 글
JDBC - CRUD INSERT, UPDATE, DELETE (0) 2022.02.04 JDBC - Statement 사용 (0) 2022.02.03 Oracle JDBC 사용 방법 (0) 2022.02.03 JDBC 10 - 최종 결과물 (0) 2021.12.03 JDBC 9 - 사용자 인터페이스 붙이기(공지사항 목록) (0) 2021.12.02