study/JDBC

2_JDBC_(관련 객체들)

스파이크12 2019. 11. 30. 08:41

@Connection

- DB의 연결 정보를 담은 객체

- JDBC드라이버와 DB사이를 연결해주는 일종의 통로

- 직접 객체 생성은 불가

-> DriverManager.getConnection() 이용하여 객체 생성

@Statement 

- Connection 객체를 이용해서 DB에 SQL문을 전달하고 

전달하는 SQL문의 실행 결과를 반환받는 역할을 하는 객체

- Connection.createStatement() 이용해서 객체 생성

@ResultSet

- SELECT문을 사용할 SQL 성공 시 반환되는 값을 저장할 객체

- SELECT의 결과로 생성된 테이블을 담고 있으며 커서(CURSOR)라는 테이블을 한 행씩

접근하는 DB객체를 이용하여 특정 행에 대한 참조를 조작함

@PreparedStatement

- statement와 같은 SQL문을 전달하고 실행하여 결과를 반환받는 객체

- 차이점은 실행 시간동안 인수값을 위한 공간을 확보

- SQL문에서 인수가 필요한 각 부분에 위치홀더(?)를 작성하여 SQL문을 정의할수 있음

- ?(위치홀더) : SQL 문장에 나타나는 토큰

SQL구문이 실행되기 전에만 실제 값으로 대체하면됨

ex)

String query = "SELECT * FROM EMP WHERE ENPNO =?";

pstmt = conn.prepareStatement(query);

- query를 PrepareStatement 객체 위에 올려두고 홀더(?)를 채울준비를함

- 홀더에 값 세팅방법

- pstmt.set[Type](?의 순번, 적용할 값)

pstmt.setInt(1, empNo);

- SQL문의 1번 홀더 자리에 empNo 값을 대입

- SQL문 완성 후 DB에서 실행 후 결과를 반환 받음

rset = pstmt.executeQuery();

- 위에서 이미 세팅해놨기때문에 매개변수에 안넣어도됨

------------------------------------------------------------------------

JDBC 관련 객체 선언

Connection conn = null;
ResultSet rset = null;
PreparedStatement pstmt = null;
//(Statement stmt = null;)

try { // ClassNotFoundException, SQLException 오류가능성있음)
	Class.forName("oracle.jdbc.driver.OracleDriver");
    //ojdbc6.jar속에 있는 OracleDriver.class를 메모리에 로딩
    
    conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
    							// 타입 : 자기자신주소 : 포트 : 오라클버전,
                                "SCOTT", "TIGER");
                                // 계정, 비번
    //-----------------------------------------------------
    // Statement로 사용시
    // String query = "SQL문";
    // stmt = conn.createStatement(); //statement 생성
    // rset = stmt.executeQuery(query); // DB조회 결과 저장
    //----------------------------------------------------
    String query = "SQL문";
    pstmt = conn.prepareStatement(qeury); 
    // query를 PreparedStatement 객체 위에 올려두고 홀더(?)를 채울 준비를함
    
    // 홀더값 세팅 방법
    // pstmt.set[Type](?의 순번, 적용할 값)
    pstmt.setInt(1, empNo);
    
    // SQL문 완성 후 DB에서 실행 후 결과를 반환받음
    rset = pstmt.executeQuery();
    // 위에서 이미 세팅해놨기때문에 매개변수에 안넣어도됨 바로 실행
    
    //while or if 절로 rset.next()를 사용하여 가져온 값을
    //커서(CORSOR)를 이용하여 한 행 씩 접근하여
    //값 넣기
    //타입 변수명 = rset.get[Type]("컬럼명");
    //조회 결과를 매개변수로 하여 EMP 객체 생성후 컨트롤러에 전달
    
    } catch(Exception e) {
   		e.printStackTrace(); // 오류잡고
    } finally {
    	try { // DB연결자원반환
        	rset.close();
            //stmt.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
        	e.printStackTrace();
        }
    }
    return 반환형;
}