JDBC - PreparedStatement

JJuuuunn·2024년 1월 31일
0

PreparedStatement는 SQL 쿼리를 미리 컴파일하여 효율적으로 실행할 수 있도록 하는 기능입니다. 매개변수를 나타내는 자리 표시자를 사용하여 SQL 주입을 방지하여 보안을 강화합니다.

사용 방법


    String SQL = "INSERT INTO {table} ({field}, {field}) VALUES (?, ?)";

    pstmt = con.prepareStatement(SQL);
    pstmt.setInt(1, {int_value});
    pstmt.setString(2, {String_value});

    rs = pstmt.execute();

PreparedStatement 메소드

메소드 명 반환타입 설명
prepareStatement(String sql) PreparedStatement 쿼리 문자열을 받아 PreparedStatement 객체를 생성합니다.
setXXX(int parameterIndex, XXX value) void 쿼리 내의 placeholder(물음표) 위치(index)와 해당하는 값을 설정합니다.
(XXX는 데이터 타입에 따라 달라집니다.)
addBatch() void PreparedStatement 객체에 실행할 쿼리 목록을 추가합니다.
이후 executeBatch() 메소드를 호출하여 한꺼번에 실행할 수 있습니다.
executeQuery() ResultSet 쿼리를 실행하고 결과를 ResultSet 객체로 반환합니다.
SELECT 쿼리에 사용됩니다.
executeUpdate() int 쿼리를 실행하고 영향받은 행의 개수를 반환합니다.
INSERT, UPDATE, DELETE 쿼리에 사용됩니다.
executeBatch() int[] PreparedStatement 객체에 추가된 여러 개의 쿼리를 한꺼번에 실행합니다.
주로 다량의 데이터 삽입, 업데이트, 삭제 작업 시 성능 향상을 위해 사용됩니다.
getResultSet() ResultSet 쿼리 실행 후 결과를 ResultSet 객체로 반환합니다.
getUpdateCount() int 쿼리 실행 후 영향받은 행의 개수를 반환합니다.
clearParameters() void 설정된 모든 파라미터 값을 초기화합니다.
close() void PreparedStatement 객체를 닫고 자원을 해제합니다.

장점과 단점 요약

장점

  • 성능 향상 : 쿼리를 미리 컴파일하여 실행 시간 단축됩니다. (반복 쿼리 효과적)
  • SQL 주입 공격 방지 : 파라미터화된 쿼리로 사용자 입력 데이터 별도 처리됩니다.
  • 코드 가독성 향상 : 쿼리 문자열과 데이터 분리로 코드 가독성과 유지 관리성이 향상됩니다.
  • 형식 검사 및 변환 : 데이터베이스 타입 맞게 검사/변환, 데이터 무결성 유지됩니다.
  • 안전한 트랜잭션 처리 : 트랜잭션 내부에서 사용 시 롤백 시 정확한 상태 복원됩니다.
  • 단점

  • 복잡성 증가 : 단순 쿼리 시 Statement 사용 간편할 수 있으며, 코드 양 증가 가능성이 있습니다.
  • 유연성 제한 : PreparedStatement는 SQL 쿼리를 미리 컴파일하므로, 실행 시간에 쿼리 텍스트를 변경할 수 없습니다.
  • profile
    포기하지않겠습니다.

    0개의 댓글