티스토리 뷰
The Statement Objects
- Use the for general-purpose access to your database. Useful when you are using static SQL statements at runtime. The Statement interface cannot accept parameters.
- 쿼리문을 처리하기 전에 이미 Statement가 결정되어 있음
- SQL Injection 공격이 가능하기 때문에 오라클 내에서 권장하지 않는 표기 법이다.
- 쿼리문이 정적으로 준비된 상태.
다음과 같은 sql 문장이 있다.
String sql = String.format("SELECT mid, name_, phone, email, TO_CHAR(regDate, 'YYYY-MM-DD') \"regDate\" " + "FROM members\r\n" + "WHERE mid='%s'", m);외부에서 정상적인 자료가 제공된 경우에는
String m = "M02";
와 같은 형태가 들어간다.
그러나 악의적인 사용자가 다음과 같이 비정상적인 자료를 제공 할 수 있다.
String m = "M02' OR 'x' = 'x";위와 같이 정보가 들어갈 경우 sql문은 최종적으로
SELECT mid, name_, phone, email, TO_CHAR(regDate, 'YYYY-MM-DD') \"regDate\" " + "FROM members\r\n" + "WHERE mid='M02' OR 'x' = 'x';다음과 같은 형태로 들어가게 된다.
OR 뒤의 'x' = 'x'의 구문은 항상 참을 만족하게 된다.
즉 관리자가 의도하지 않은 SELECT문의 결과를 악의적인 사용자는 얻을 수가 있다.
SQL Injection을 방지하기 위해서 PreparedStatement를 사용하게 된다.
The PreparedStatement
- Use the when you plan to use the SQL statements many times. The PreparedStatement interface accepts input parameters at runtime.
- 쿼리문이 동적으로 준비된 상태.
- 쿼리가 사전에 컴파일 되어 있는 상태이고 필요한 데이터 자료만 매개변수를 통해서 전달을 함.
- SQL Injection 공격을 방지할 수 있고 보안적인 측면에서 더 좋은 방법이다.
PreparedStatement는 Statement문에 대한 처리를 전처리로 진행하게 된다.
PreparedStatement pstmt = null;사전 준비시 Statement가 아닌 PreparedStatement Interface를 준비한다.
String sql = "SELECT mid, name_, phone, email, TO_CHAR(regDate, 'YYYY-MM-DD') \"regDate\" " + "FROM members\r\n" + "WHERE mid=?";구문을 삽입할 때 데이터바인딩 문자열인 '?'를 사용한다.
pstmt = conn.prepareStatement(sql);쿼리문을 진행하기 전에 Oracle 측에서 쿼리문의 형태를 분석하는 전처리 작업을 진행한다.
pstmt.setString(1, m);데이터 바인딩 문자열에 매핑할 자료를 setXXX() 메소드로 넘겨준다.
이때, 첫번째 인자는 데이터 바인딩 문자열 순서('?'의 순서), 두번째 인자는 들어갈 데이터가 된다.
ResultSet rs = pstmt.executeQuery();
이후 executeQuery() 메소드를 이용해 쿼리를 실행하면 된다.
Statement로 처리할때와 다르게 executeQuery 값에 sql 문이 삽입되어 있지 않다.
'IT 공부 in 교육센터 > JDBC_개념정리' 카테고리의 다른 글
Oracle Database와 Java 연동 방법 (0) | 2018.09.03 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Apache24
- 토비의스프링
- oracle
- 동사의활용
- 동사의 활용
- 버전 업그레이드
- 설치
- た
- 일본어
- Database
- 성적관리
- 동사 た
- 외부접속
- 일본어 공부
- た형
- AH02102
- 번호자동증가
- PreparedStatement
- 초기설정
- git
- ない형
- JDBC
- て형
- 저장소생성
- mysql 8.0
- Java
- 직원관리
- ない
- 취업성공패키지
- git설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함