Statement

1. Statement

  • DBMS에 전달할 SQL 문장을 저장하는 객체.

  • 간단한 SQL문 실행에 적합하다

  • DBMS서버에 SQL문 전송시 매번 새로운 SQL문을 파싱하여 전달하게 된다

    • 파싱 : SQL 문자열을 DBMS가 해석할수 있는 언어로의 변환과정

    • 동일한 SQL문을 재 실행할 때도 매번 파싱이 이루어지는 것

  • SQL Injection에 취약하다

SQL Injection(SQL 삽입)

SQL Injection은 사용자의 입력값이 sql문에 삽입되어 악의적인 SQL문이 실행되도록 하는 보안공격 행위.

String sql = "SELECT * FROM USERS WHERE USERNAME = '"+input+"'"; 와 같은 sql문을 호출시 사용자가

' OR 1=1 과 같은 데이터를 입력시 조건으 만족하지 못해도 항상 참인 조건식으로 만들 수 있다.

2. PreparedStatement

  • 미리 SQL문을 준비(Prepared)해두는 객체

  • SQL문 실행전에 SQL문을 파싱해두고, 재사용이 가능하게 한다

  • SQL Injection을 방지할 수 있다.

  • ?를 통해 sql 실행에 필요한 파라미터를 바인딩 할 수 있다.

3. CallableStatement

  • DB에 저장된 프로시저 및 함수를 호출할 때 사용한다

  • 복잡한 서버 비지니스 로직을 DB내에서 실핼할 수 있다.

  • SQL내부 저장 프로시저를 통해 DB작업을 분리할 수 있다.

Last updated