본문 바로가기
programming/java

[java] jdbc를이용한 oracle database 연결

by 힐무새 2017. 5. 11.

jdbc란 (Java Database Connectivity)의 줄임말로, java를 통해 데이터베이스에 접근할 수 있게하는 프로그램 API를 말합니다. jdbc를 통해 java프로그램 내에서 query를 통해 DB에서 원하는 정보를 불러오거나 수정, 추가, 삭제할 수 있습니다.



이번 포스팅에서는 oracle driver를 java에 설정하고 db와 접속, query문을 통해 data를 읽어들이기 까지의 절차를 간단하게 설명하겠습니다. 먼저 밑의 그림은 전체적인 db접속부터 데이터를 받기까지 결과를 나타낸 것입니다.



- driver 다운로드 및 lib에 위치 지정

먼저 oracle 서버에서 driver를 다운로드한 lib 파일인 ojdbc6.jar 파일을 \WebContent\WEB-INF\lib에 복사합니다(jsp 실습을 위해서 위와 같은 경로로 설정하였습니다).

- 드라이버 로드

클래스를 jvm 메모리에 로딩하는 과정이 필요합니다. lib 파일에 속한 드라이버 클래스 파일인 OracleDriver.class를 메모리에 로딩합니다(정확한 경로는 oracle.jdbc.driver.OracleDriver).

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

- DB와 연결

Oracle DB와의 연결을 위한 url이 필요한데요. url의 구조는

driver정보:ip번호:port번호:SID의 형태로 이루어져있습니다. 예를들어 localhost이면서 port번호가 5050, sid=xe라 하면

url="jdbc:oracle:thin@localhost:5050:xe";

가 되겠습니다. url을 정했으면 Connection 객체를 통해 DB와 연결을 시도하는데, 이때 DB의 id와 password가 요구되니 미리 계정을 생성하시기 바랍니다.

Connection con= DriverManager.getConnection(url,id,pass);

- 대화하기(Statement, PreparedStatement)

DB와의 연결이 성공했다면 이제 query를 통해 원하는 정보를 불러오도록 하겠습니다. 간단한 sql문을 작성합니다.

저는 "select * from emp"로 설정했습니다. sql을 작성했다면 이제 DB와의 대화를 통해 데이터를 불러오는 과정이 필요합니다. Connection 객체에서 Statement 객체를 생성하여 query를 할 수 있는 매개 객체를 만들 수 있습니다.

Statement stmt= con.createStatement();

이제 Statement 객체를 사용하여 db에 query를 요청할 수 있게 됬습니다. Statement의 excuteQuery()메서드를 통해 query의 수행 결과를 ResultSet을 통해 받게됩니다.

ResultSet rs= stmt.excuteQuery(sql문);

- 결과값 처리

이제 결과값이 저장된 ResultSet 객체를 확인해볼 시간입니다. next()메서드는 다음 row데이터가 있는지 여부를 boolean값으로 반환합니다. 이를 활용하면 while() 반복문으로 데이터를 모두 읽을 때까지 원하는 동작을 수행할 수 있을 것입니다. 위의 sql이 select문이였으므로 데이터를 읽어오는 동작을 수행해보겠습니다. 다음은 특정한 컬럼값인 ename을 읽어올 경우입니다.

while(rs.next()){

rs.getString("ename");

}

마지막으로 db의 수정사항이 있는 경우, con.commit() 또는 con.rollback()를 통해 수정사항을 결정하거나 취소할 수 있습니다.

- VO(Value Object)가공

마지막으로 받아온 row 단위 데이터를 객체로 재가공하여 ArrayList에 저장하면 데이터를 다루기 쉬울 것입니다. Emp테이블에서 데이터를 받아왔으므로 Emp클래스를 생성하고 get(), set()메서드를 통해 객체를 가공 후 ArrayList에 하나씩 저장하면 됩니다.


- 소스코드


'programming > java' 카테고리의 다른 글

[java] 정규 표현식  (0) 2017.06.01
[java] StringBuilder, StringBuffer의 차이  (0) 2017.06.01
[java]thread  (0) 2017.06.01
[java] Collection  (2) 2017.05.15
싱글톤(Singleton)  (6) 2017.05.11