ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JDBC] PreparedStatement란?
    program_language 및 궁금한것/DB연동 JDBC 2019. 6. 12. 19:06

    Statement

    DML 메소드를 실행하는 시점에 파라미터로 SQL문을 DB에 전달한다.

    장점 - 사용된 SQl문 전체를 명확히 할수 있어서 디버깅이 쉽다.

    단점 - 사용자가 입력한 데이터가 SQL문장을 구성할 수 있다.

    ex. select count(*) cnt from membership where id='a' or 1=1 -- ' and pass='1234'

    ex. stmt= conn.createStatement();

         String sql="insert into person values(1,'"+변수+"',13'학생); <- 변수에 sql문이 들어와도 실행된다.

         stmt.excuteUpdate(sql); <-- 사용자가 입력한 데이터를 최종적으로 sql실행하게 된다.

     

    PreparedStatement

    Statement를 부모로 가지는 자식이다.

    사용목적: SQL Injection에 있다. 

     

    장점:  파싱을 한번하기에 빠르다.

            따옴표와 자료형을 신경쓰지 않아도 된다.

            사용자가 입력한(sql 구문) 데이터가 변경될 염려가 없다. 

            커넥션에서 생성하면서 SQL문이 DB에 전송되어진다.

    단점: 오류발생시 변수에 입력되는 값을 알 수 없어서 디버깅이 어렵다.

    한번만 파싱하고 값을 바꾼다.

     

    사용법. 

    String sql ="insert into person values(?,?,?,?)"; // - ?는 바인드 변수를 뜻한다.
    stmt= conn.prepareStatement(sql); // <- 데이터가 빠진 sql을 전송
    // ?수만큼 설정한다.
    stmt.setInt(1,1);
    stmt.setString(2,name); // <-변수 name
    stmt.setInt(3,13);
    stmt.setString(4,"학생");
    
    stmt.executeUpdate(); // * 주의- excute()메소드 내에 sql기입하면 안된다.

              

    반응형

    'program_language 및 궁금한것 > DB연동 JDBC' 카테고리의 다른 글

    [JDBC] 컬렉션 프레임워크 ( Collection Framework)  (0) 2019.06.14
    [JDBC] DAO와 DTO, VO  (0) 2019.06.10
    JDBC 란?  (0) 2019.06.05

    댓글

Designed by Tistory.