Statement
•
SQL 쿼리를 실행하기 위한 기본 인터페이스이다.
•
SQL 쿼리를 문자열로 직접 작성하여 실행한다.
•
SQL 인젝션 공격에 취약할 수 있다.
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE username = '" + username + "'");
Java
복사
PreparedStatement
•
미리 컴파일된 SQL 쿼리를 실행하기 위한 인터페이스이다.
•
쿼리의 구조를 미리 정의하고, 실행 시에 파라미터를 바인딩한다.
•
SQL 인젝션 공격을 방지할 수 있다.
•
성능이 더 좋을 수 있다(특히 반복 실행 시)
String sql = "SELECT * FROM users WHERE username = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
ResultSet rs = pstmt.executeQuery();
Java
복사
•
보안: PreparedStatement는 파라미터 바인딩을 통해 SQL 인젝션 공격을 방지할 수 있다.
•
성능: PreparedStatement는 미리 컴파일된 쿼리를 사용하므로 반복 실행 시 성능이 더 좋을 수 있다.
•
가독성: PreparedStatement는 쿼리와 데이터를 분리하여 코드의 가독성을 높인다.
데이터베이스와 상호작용할 때는 보안과 성능을 고려하여 PreparedStatement를 사용하는게 좋다



