본문 바로가기

프로그래밍/JAVA

JDBC 종류 및 처리단계


JDBC 종류 및 처리단계

종류
1. Statement
2. PreparedStatement
3. CallableStatement
4. DBCP드라이버 (dbcpOracle.jocl 파일을 사용하는 방법)


파일 내용을 알맞게 변경한다.
ex) <string value="jdbc:oracle:thin:id/pw@ip:1521:Java20"/>
사용시 예제
 private final String nDRV = "oracle.jdbc.OracleDriver";
 private final String cDRV = "org.apache.commons.dbcp.PoolingDriver";
 private final String cURL = "jdbc:apache:commons:dbcp:/dbcpOracle";

 private final String oDRV = "oracle.jdbc.driver.OracleDriver";
 private final String cDRV = "org.apache.commons.dbcp.PoolingDriver";
 private final String cURL = "jdbc:apache:commons:dbcp:/dbcpOracle";

 Class.forName(nDRV); // DB Driver
 Class.forName(cDRV); // DBCP Driver
 return DriverManager.getConnection(cURL); // DBCP


처리단계
1. JDBC 드라이버 Load
Class.forName( "oracle.jdbc.driver.OracleDriver" );

Class.forName( oDRV );
Class.forName( cDRV );
DriverManager.getConnection( cURL );

 

2. Connection 객체 생성
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@[IP주소]:[포트번호:1521]:[DB이름]",[아이디],[비번] );
또는
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:[아이디]/[비번]@[IP주소]:[포트번호:1521]:[DB이름]" );


3. Statement/PreparedStatement/CallableStatement 객체 생성
* sql쿼리를 생성 및 실행하며, 반환된 결과를 가져오게 할 작업 영역을 제공한다.
* 여기서 부터는 jdbc 드라이버에 구애받지 않는다.
-------------------------------------------------------------------
Statement 형
String SQL = "select * from emp";
Statement stmt = conn.createStatement();
-------------------------------------------------------------------
PreparedStatement 형
String SQL = "select * from emp(?)";
PreparedStatement pstmt = conn.prepareStatement(SQL);  <- 생성할때 procedure를 사용함
pstmt.setString(1,값); <- ? 와 치환하는 값
pstmt.setInt(2,값);  <- ? 와 치환하는 값
... ...
-------------------------------------------------------------------
CallableStatement 형
String SQL = "(call selectSungJuk(?))";                      <- 내장된 procedure명
CallableStatement cstmt = conn.prepareCall(SQL);       <- 생성할때 procedure를 사용함
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
ResultSet rs = cstmt.getObject(1);


/**
         /***************************************
          * Data Base package Call
          ***************************************/
         call = con.prepareCall ("{ call PCK_TEST.TEST_SELECT(?,?) }");
         /***************************************
          * Parameter Setting
          ***************************************/
         call.setString(1,ls_userid ) ;
         call.registerOutParameter (2, OracleTypes.CURSOR);

         /***************************************
          * Query Execute
          ***************************************/
         call.execute ();
         rs = (ResultSet)call.getObject (2);
         retRst = new ReturnResult(rs);
        
         return retRst;

여기서 retRst를 빈으로 만드시면 될꺼 같습니다.
주요 핵심은 저기에 있는
call.registerOutParameter (2, OracleTypes.CURSOR);
커서 타입으로 받아 오시는 것이 좋을듯 합니다.
**/
-------------------------------------------------------------------


4. Query 수행
* executeQuery()  - select 문 (ResultSet 반환)
* executeUpdate() - insert, update, delete 문 (성공한 row수 반환)
-------------------------------------------------------------------
Statement 형
ResultSet rs = stmt.executeQuery(SQL);
int num = stmt.executeUpdate(SQL);
-------------------------------------------------------------------
PreparedStatement 형
ResultSet rs = pstmt.executeQuery();
int num = pstmt.executeUpdate();
-------------------------------------------------------------------
CallableStatement 형
ResultSet rs = cstmt.executeQuery();
int num = cstmt.executeUpdate();

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


5. ResultSet 처리 ( executeQuery() 반환값을 받음 )
ResultSet rs = stmt.executeQuery(SQL);
while( rs.next() ){  <- next() 처리 할 row값이 있으면 true를 리턴
 rs.getString(1); <- getString() 문자열값을 받음 row에서 column값을 선택함 (번호 또는 column명)
 rs.getInt(2);  <- getInt() 숫자값을 받음 row에서 column값을 선택함 (번호 또는 column명)

6. 종료
rs.close();  <- ResultSet 종료;
stmt.close(); <- Statement 종료;
conn.close(); <- Connection 종료;

'프로그래밍 > JAVA' 카테고리의 다른 글

자바 개발환경 및 이클립스 설정  (0) 2012.01.02
백터,리스트,해시맵 사용예시  (0) 2012.01.02