Post
JDBC - PreparedStatement
Statement 클래스
- SQL 구문을 실행하는 역할
- 스스로는 SQL 구문 이해 못함(구문해석 X) -> 전달역할
- SQL 관리 O + 연결 정보 X
- SQL Injection 발생가능
EX) SELECT * FROM USER_MASTER WHERE ID = ‘”+ID”’ AND PASSWORD= ‘”+PW+”’;
이부분에서 의도적으로 ID를 ’ OR 1 = 1 -- 로 준다면
--> SELECT * FROM USER_MASER WHERE ID=’’ OR 1 = 1 -- AND PASSWORD = ‘’;
--> 전체 검색 발생
- 단일로 사용될 때 빠른 속도
- 쿼리에 인자 부여 X
- 매번 컴파일 수행필요
PreparedStatement 클래스
- Statement 클래스의 기능 향상
- 인자와 관련된 작업이 특화(매개변수)
- 코드 안정성 높음. 가독성 높음.
- 코드량이 증가 -> 매개변수를 set해줘야하기 때문에..
- 텍스트 SQL 호출
- SQL INJECTIN 방어 : 질의문자열을 파라미터를 바인딩하는 방법이기 때문에 공격자의 의도에 따른 의미있는 쿼리로 동작하지 않음
- 쿼리 인자 부여 O
- 처음 프리컴파일 이후 컴파일 수행 X
- 여러번 수행 시 빠른 속도
Statement 예시 - 매개변수 줘야 함
String name = “오징어”; String memo = “오징어튀기임”; String sql = String.format(“insert into tblMemo values(memoSeq.nextval,’%s’,’%s’)”, name, memo); String sql2 = “INSERT INTO TBLMEMO(number, name, memo) VALUES(memoSeq.nextval,’”+name+”’,’”+memo+”’)”;
PreparedStatement 예시 (?의 유무)
sql = “insert into tblMemo values(memoSeq.nextval,?,?,default,?)”; pstat = conn.prepareStatement(sql); //매개변수 값 대입 + 매개변수 유효화 처리. pstat.setString(1, name); pstat.setString(2, memo); pstat.setString(3, priority);
아래는 더 자세하게 알아보고 싶을 때
Statement 참고하기
[JAVA - 오라클 DB에 쿼리 날리기( INSERT, DELETE, UPDATE)
이번 포스팅에선 자바를 사용하여 데이터베이스(DB)에 데이터를 저장하는 방법에 대해서 소개하겠습니다. 오라클(Oracle)에서 작성했던 쿼리를 문자열에 담아서 DB에 접속하고 쿼리문을 날리는 방식입니다. 쿼리문..
cocodo.tistory.com](https://cocodo.tistory.com/9)
PreparedStatement 참고하기
[JAVA - PreparedStatement 사용하기
지난번 오라클 DB에 쿼리를 날리는 방식을 소개할때 Statement를 사용했습니다. 자바에서 쿼리를 생성하고 실행하는 방법을 모르시는 분은 아래 글을 참조하시길 바랍니다. 2017/11/08 - [IT/Language] - JAVA -..
cocodo.tistory.com](https://cocodo.tistory.com/11)
댓글