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 |