-
(jdbc) DaoImpl 코드 패턴Database/컨셉 , 예제 2018. 8. 29. 13:18
보통 기업에서 데이터베이스로 오라클을 많이 사용하기 때문에 오라클과 자바를 연동시키는 패턴에 대해 익숙한 것이 중요하다. 실무 Dao 패턴 정리.
package com.naver.blog.book.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.naver.blog.book.vo.BookVO; public class BookDaoImpl implements BookDao{ @Override public List
selectAllBooks() { // 1. Oracle Driver Loading try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { // 웹에서 예외 처리 방법. 웹페이지와 콘솔에 에러를 보다 정확하게 파악 가능 throw new RuntimeException(e.getMessage(), e); } // 2. OJDBC 객체 생성 Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; // 3. 토드에 생성해둔 Oracle 스키마 접속 // mac의 경우 localhost 대신 콘솔에서 ifconfig 로 찾아 직접 입력해야 함. String url = "jdbc:oracle:thin:@localhost:1521:XE"; try { conn = DriverManager.getConnection(url, "BOOK", "1234"); // 4. 쿼리 작성 StringBuffer query = new StringBuffer(); query.append(" SELECT BOOK_ID " ); query.append(" , BOOK_NM " ); query.append(" , BOOK_SUB_NM "); query.append(" , IDX " ); query.append(" FROM BOOK " ); // 5. 결과 담기. stmt = conn.prepareStatement(query.toString()); rs = stmt.executeQuery(); List bookList = new ArrayList (); BookVO book = null; while(rs.next()){ book = new BookVO(); book.setBookId(rs.getInt("BOOK_ID")); book.setBookName(rs.getString("BOOK_NM")); book.setBookSubName(rs.getString("BOOK_SUB_NM")); book.setIndex(rs.getString("IDX")); bookList.add(book); } // 6. 결과 리턴 return bookList; } catch (SQLException e) { throw new RuntimeException(e.getMessage(), e); } finally{ // 7. 사용한 객체들 닫기 if(rs != null){ try { rs.close(); } catch (SQLException e) { } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { } } if(conn != null){ try { conn.close(); } catch (SQLException e) { } } } } } 1단계 오라클 드라이버 로딩은 jdbc 연동 포스팅에 올려놓은 패키지 경로의 클래스를 사용해 오라클 드라이버를 로딩시킨다. 이 절차를 거쳐야 오라클에서 쿼리문의 결과를 실제 메모리에 적재시키거나 가져올 수 있는것으로 이해했다.
2단계 객체들 역할
Connection : 데이터베이스 연결 돕는 객체
PreparedStatement : 쿼리문의 실행을 위해 준비된 객체. 해당 객체에 적당한 쿼리문 값을 입력한 후 executeQuery 메소드를 통해 쿼리문을 실행시킨다. 지금 예제의 경우 query문의 값을 모르는 것이 없어 못느끼겠지만 다른 페이지에서 값을 얻어오는 경우에는 쿼리 중 ?로 오는 것들이 많고, 이것을 setParameter 메소드를 사용해 쿼리문을 편하게 완성시키도록 돕는 강력한 기능을 제공하는 객체.
ResultSet : PreparedStatement 객체의 executeQuery문 결과를 담는 객체. Select문의 결과를 row 형태로 담는다. 결과는 여러가지가 나올 수 있기 때문에 list 형태로 값에 접근할 수 있다.3단계 url 중 thin과 1521, xe가 무엇인지 모르고 작성하는 경우가 많을 것이다. 이에 대한 궁금증을 어느정도 해소해 이해를 기반으로 외우는 것이 효과적이다.
THIN : DB 접속 방식. 순수하게 자바 패키지(클래스들)만으로 바로 DB와 연결,
XE는 Oracle 클라이언트의 서버명. 디폴트로 XE를 사용한다.
7단계 객체들 닫기. 객체가 null인지 확인하는 이유는 재사용시 널포인터 예외 발생을 예방하기 위함이다.'Database > 컨셉 , 예제' 카테고리의 다른 글
자바 & 오라클(Oracle) 쿼리 가져오기 (0) 2018.08.29