-
[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