-
Statement와 PreparedStatement, ResultSet, ResultSetMetaData프로그래밍/JSP 2012. 9. 3. 13:52
1. Statement
- Statement는 실제 데이터베이스에 쿼리를 보내기 위해 필요한 객체.
- 삽입, 수정, 삭제, 검색을 처리하는 DML문을 사용할 때 이 인터페이스를 사용.
- 이 객체는 Connection 객체의 연결정보를 사용하므로 Connection 객체가 먼저 존재해야함.
- Statement 객체에서 자주 사용되는 객체는 아래와 같다.
- excuteQuery(String sql): SELECT 문을 실행할 때 사용(ResultSet 객체 반환)
- excuteUpdate(String sql): 삽입, 수정, 삭제와 관련된 SQL문 실행에 사용(int형으로 적용된 행수를 반환)
- close(): Statement 객체를 반환할 때 사용
2. PreparedStatement
- String sql = "INSERT INTO student (num,name) VALUES (?,'홍길동')";
- 위와 같이 미리 사용할 SQL Query를 작성함. VALUES에 첫번째 인자를 바인딩 변수로 잡음. 즉 첫번째 인자는 유동적인 값으로 잡고, 뒤 변수 '홍길동'은 문자열로 INSERT 함
- 바인딩 변수인 ?에 값을 집어 넣는 방법은 다음과 같다.
- stmt.setInt(1,i); //첫번째 인자(1)에 i 값을 삽입(setInt 이므로 정수형)
- 문자열을 넘겨주고 싶으면 setString() 메소드를 사용하면 됨
3. ResultSet
- Statement, PreparedStatement에서 SELECT 문을 통해 얻어온 레코드 값들을 테이블 형태로 갖는 객체.
- ResultSet에서 자주 사용하는 메소드는 아래와 같다.
- close(): ResultSet 객체를 반환.
- getXXX(int ColumnIndex): 레코드 값을 XXX타입으로 가져옴
- getXXX(String ColumnName): 레코드 값을 지정한 XXX 타입을 가져옴(Column 명 지정)
- next(): 다음행으로 커서를 이동
- 예제 코드: String sql = "SELECT * FROM student";
PreapredStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
out.println("<h3>"+rs.getInt(1)+","+rs.getString(2)+"</h3>");
- 위 예제를 보면 라인5에서 rs.hetInt(1)로 첫번째 컬럼의 Int형 데이터를 가져오고, rs.getString(2)에서 두번째 컬럼의 문자열을 가져옴
- 또한 conn.prepareStatement(sql) 명령과 ResultSet으로 미리 student 테이블의 데이터를 모두 가져온 후 getInt()를 통해 데이터를 출력하는것을 알 수 있다.
- 여기서 궁금한것은 getInt와 getString에서 동적쿼리가 생성될 경우 SQL Injection 위험이 존재하는가? 이다.
- 일단은 preparedStatement를 통해 데이터를 가져온 후 작업을 하기 때문에 불가능하다고 판단할 수 있다.
-
'프로그래밍 > JSP' 카테고리의 다른 글
[struts] 스트럿츠 개념과 이해 (0) 2012.09.10