특성 | Statement | PreparedStatement | CallableStatement |
---|---|---|---|
쿼리 유형 | 간단하고 매개변수 없음 | 매개변수 사용 | 매개변수 사용, 저장 프로시저 |
성능 | 반복 실행에 적합하지 않을 수 있음 | 매개변수를 사용하여 반복 실행에 효율적 | 저장 프로시저에 특히 효율적 |
가독성 | SQL 쿼리가 Java 코드에 포함 | 매개변수를 사용하여 쿼리가 가독성 향상 | 매개변수를 사용하여 쿼리, 저장 프로시저 지원으로 가독성 향상 |
사용 사례 | 간단한 쿼리 | 매개변수를 사용한 반복 쿼리 | 저장 프로시저 호출 |
주의사항 | SQL 인젝션과 같은 보안에 취약 같은 쿼리 반복 실행시 성능이 좋지 않음 |
매번 쿼리를 컴파일 해야하므로 복잡한 쿼리에 대해 성능이 안좋을 수 있음 | 사용하기 복잡함 데이터베이스의 의존성이 높아져 db 성능에 부하가 높아질 수 있음 |
String sql = "SELECT * FROM Employees";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
String sql = "SELECT * FROM Employees WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 100);
ResultSet rs = pstmt.executeQuery();
String sql = "{call PROCEDURE(?, ?)}";
CallableStatement cstm = conn.prepareCall(sql);
cstm.setInt(1, 100);
cstm.regiterOutParameter(2, Types.VARCHAR);
cstm.execute();
String outputValue = cstm.getString(2);