PreparedStatement vs Statement(JDBC)

Soozoo·2024년 7월 11일

데이터베이스(DB)

목록 보기
17/19

PreparedStatement vs Statement: JDBC에서의 데이터베이스 쿼리 처리

1. Statement

Statement은 간단한 SQL 문장을 실행하는 데 사용됩니다. 이는 정적인 쿼리를 실행할 때 유용합니다. Statement는 다음과 같은 특징을 가지고 있습니다:

  • 일반적인 사용 사례: 정적인 SQL 문장을 여러 번 반복해서 실행해야 할 때 사용합니다.
  • SQL 인젝션 취약점: 사용자 입력을 직접 문자열로 쿼리에 포함시키므로, 보안상 취약할 수 있습니다. 사용자 입력에 대해 추가적인 이스케이프 작업이 필요합니다.
  • 성능: 매번 실행할 때마다 SQL을 컴파일해야 하며, 반복적인 실행 시 오버헤드가 발생할 수 있습니다.

예시:

String sql = "INSERT INTO users (id, name, age) VALUES (1, 'Alice', 25)";
Statement stmt = conn.createStatement();
int result = stmt.executeUpdate(sql);

2. PreparedStatement

PreparedStatement는 미리 컴파일된 SQL 문장을 실행할 수 있습니다. 이를 통해 매개변수화된 쿼리를 사용할 수 있으며, 다음과 같은 장점을 가집니다:

  • SQL 인젝션 방지: 매개변수를 사용하여 SQL 쿼리를 미리 준비합니다. 사용자 입력이 안전하게 처리됩니다.
  • 성능: 쿼리가 한 번 컴파일되고, 그 이후에는 매개변수 값만 바뀌어 실행됩니다. 따라서 반복적인 실행에 효율적입니다.
  • 가독성 및 유지보수: 코드가 더 간결하며, 매개변수의 타입 변환 작업이나 추가적인 문자열 처리를 줄일 수 있습니다.

예시:

String sql = "INSERT INTO users (id, name, age) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1);
pstmt.setString(2, "Alice");
pstmt.setInt(3, 25);
int result = pstmt.executeUpdate();

언제 어떤 것을 사용할까?

  • 단순한 SQL 문장이나 한 번 실행되는 쿼리Statement를 사용할 수 있습니다.
  • 매개변수가 필요한 동적인 쿼리PreparedStatement를 사용하여 SQL 인젝션을 방지하고 성능을 개선할 수 있습니다.
  • 반복적으로 실행되는 쿼리PreparedStatement를 사용하여 쿼리를 미리 컴파일하고 재사용할 수 있습니다.
profile
넙-죽

0개의 댓글