백엔드 과정/jdbc
[JDBC] PreparedStatement
mim
2022. 2. 3. 21:30
반응형
PreparedStatement
Connection 클래스의 preparedStatement () 메소드를 사용하여 인스턴스 생성
SQL 질의문을 위치홀더(placeholder)인 ? 로 표현되는 String으로 정의 한다.
PreparedStatement 는 위치홀더라는 개념에 해당되는 인수가 많아서
특정 값만 바꾸어 여러 번 실행해야 할 때 사용하면 유용하다.
(Statement 는 SQL 문장을 매번 컴파일 하지만 PreparedStatement 는 한번만 컴파일 하므로 실행 속도가 빠름)
try {
String query = "INSERT INTO MEMBER VALUES(?,?)";
stmt = conn.preparedStatement(query)
pstmt.setString (1, id);
pstmt.setString (2, password);
}catch (SQLException e) {
e.printStackTrace
}
쿼리문인 "INSERT INTO MEMBER VALUES(?,?)" 에서 첫번째 ? 에는 id를, 두번째 ? 에는 password를 전달하여 실행.
/* 1. Connection 생성 */
Connection con = getConnection();
PreparedStatement pstmt = null;
ResultSet rset = null;
String empId = "207";
try {
/* 2. PreparedStatement 생성 */
pstmt = con.prepareStatement("SELECT EMP_ID, EMP_NAME FROM EMPLOYEE WHERE EMP_ID = ?");
pstmt.setString(1, empId);
/* 3. excuteQuery() 로 쿼리문을 실행하고 결과를 ResultSet으로 반환받음 */
rset = pstmt.executeQuery();
/* 4. ResultSet에 담긴 결과 값을 컬럼 이름을 이용해 꺼내오기 */
if (rset.next()) {
/* next() : ResultSet의 커서 위치를 하나 내리면서
* 행이 존재하면 true, 존재하지 않으면 false을 반환 */
System.out.println(rset.getString("EMP_ID") + ", "
+ rset.getString("EMP_NAME"));
} else {
System.out.println("해당하는 결과값이 없습니다.");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
/* 5. 사용한 자원 반납 */
close(rset);
close(pstmt);
close(con);
}
}
반응형