백엔드 과정/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);
	}

}

 

 

 

반응형