ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.