본문 바로가기
개발/JAVA

JDBC를 이용해 Oracle DB와 연동하기 - 1 (개념설명)

by pastry 2014. 11. 25.

※블로그를 쓸 시간이 별로 없는 관계로 요즘에 배우는 부분부터 올리고 나중에 정리 할 예정입니다.

 

JDBC란 Java DataBase Connectivity의 약어로 데이터 베이스에 연결 및 작업을 하기 위한 자바 표준 인터베이스 이다.

※당연한 얘기지만 JDBC를 사용하려면 DB에 대한 지식이 있어야 한다.

※Driver load를 하기 위해선 사용하고자 하는 project에 db벤더가 제공하는 class파일들의 묶음을 추가해놔야 한다.

자바 코드를 구동하게되는 플렛폼에서 데이타를 처리하고 저장하기 위한 공간이 필요한데, 임시 객체로 생성한 자바의 자료형은 IOStream을 사용해서 file형태로 저장이 가능하나, 그보다 좀더 체계적으로 데이타를 관리할 필요성이 있다. JDBC는 자바에서 DB를 사용하게 해주는 인터페이스이다.

JDBC 프로그램의 구현 순서를 살펴보자.

1. JDBC 드라이버 로드 :

Java에서 DB에 접속하려면 사용하는 DB벤더가 제공하는 class를 불러와야 한다. 나는 oracle DB를 사용중이기 때문에 아래의 코드로 드라이버를 로드했다.

Class.forName("jdbc.oracle.driver.OracleDriver");

클래스를 로드할때 클래스가 존재 하지 않을때 처리할 예외 처리도 해 주어야 한다.

String jdbc = "jdbc.oracle.driver.OracleDriver"

try{

Class.forName(jdbc);

}catch(ClassNotFoundException e){/*예외처리*/}

 

jdbc.oracle.driver.OracleDriver, 혹은 jdbc.oracle.OracleDriver (driver가 빠져있다.)

라고 쳐도 둘다 에러없이 실행된다.

jdbc.oracle.driver.OracleDrivers는 Oracle i9부터 업데이트를 지원하지 않는다고 하니  jdbc.oracle.OracleDriver 를 사용하면 더 최신의 API를 지원 받을 수 있겠다.

2. 데이터 베이스 연결 :

드라이버를 로드 해왔으니 이제 DB에 연결해야 한다.

Connection conn = DriverManager.getConnection(url, id, password);

여기서 url은 접속할 DB가 있는 서버의 정보를 말하는데,

String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";

oracle에 jdbc를 thin타입으로 ip주소는 127.0.0.1 (localhost를 말한다.) pid는 xe

라고 이해하면 된다. 틀린게 있을수도 있으니 세부 항목은 자세히 검색해보는걸 추천

참고로 thin타입같은 타입은 4종류가 있으며 실습에는 4타입인 thin이 무난하다.

3. Statement생성:

이제 DB에 접속을 했으니 query문을 날려야 하는데 이를 담을 수 있는 statement를 생성해야 한다.

Statement stmt = conn.createStatement();

Connection.createStatement메소드로 Statement인스턴스를 반환받아 사용한다.

이제 생성한 Statement에 쿼리를 담아서 실행하면 된다.

4.쿼리문 전송 & 결과문 수신

ResultSet result=stmt.excuteQuery("select * from emp");

select문처럼 반환값이 검색한 내용을 담고 있는 쿼리는 excuteQuery로, update,insert,delete같이 반환값이 몇개 성공, 실패 int형으로 반환되는 쿼리는 excuteUpdate를 사용한다. 

result값의 접근은

while(result.next()){

System.out.println(result.getString(1));

}

이런식으로 가능하다.

5. 연결 해제

자원의 사용을 마쳤으면 이제 해제를 해야한다.

if(state!=null) state.close();

if(conn!=null) conn.close();

물론 예외처리도 해줘야 한다.

간단하게 전체 과정을 구현한 코드이다. 보기 편하게 모아 놓은 것이므로 한눈에는 보이나 비효율적인 코드이며, 실제 사용할때는 디자인 패턴을 적용해서 재사용이 용이하게 짜야한다.

 

 

 

 

 

댓글