비전공자 공부일기/:: DB - SQL

오라클 DB 정리09-JDBC

와니_ 2019. 5. 29. 10:26

● JDBC(Java DataBase Connectivity)
 
  1. JDBC 환경 구축
 
    - JDK 설치 및 환경설정
 
      http://www.oracle.com   => 다운로드
 
     환경변수 => JAVA_HOME 및 Path 설정      
 
    - DBMS(Oracle) 설치
 
      http://www.oracle.com  => 다운로드
 
    - DBMS(Oracle) Driver 다운로드 후 JDK가 사용할 수 있도록 복사
      
      Oracle 경우
    
        >> C:\oracle\product\11.2.0\dbhome_1\jdbc\lib 디렉토리 : ojdbc6.jar(oracle driver)
 
      OracleXE 경우
      
        >> C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib 디렉토리 : ojdbc6.jar(oracle driver)
 
     ※ 이클립스 사용시 라이브러리 추가 기능을 이용하여 ojdbc6.jar 파일을 프로젝트에 추가 

  2. JDBC 프로그램 작성 => java.sql 패키지의 인터페이스 이용
 
   1) Driver 클래스 메모리 로드 => Driver 클래스를 객체 생성
 
      Class.forName("oracle.jdbc.driver.OracleDriver");
 
   2) Connection 객체 얻어오기 => DB 접속 정보를 저장한 객체
 
      Connection Connection객체
       =DriverManager.getConnection(URL주소, 유저명, 암호);
 
      ※ URL주소 => Oracle
 
         jdbc:oracle:thin:@서버주소:port번호:SID
 
   3) Statement객체를 얻어오기 => SQL명령을 입력하여 실행하기 위한 객체
 
      Statement Statement객체=Connection객체.createStatement();
 
   4) SQL 명령 전송 실행 => Statement객체의 executeUpdate() 메소드 또는 executeQuery() 메소드
 
      Statement객체.executeUpdate(SQL명령);  => DML명령(DDL명령) 사용시 - int 반환(변경행의 갯수 반환)
 
      Statement객체.executeQuery(SQL명령);  => Select 명령 사용시 - ResultSet객체 반환(검색된 데이타들의 정보)
 
      ※ ResultSet 객체를 얻어온 경우 커서를 이용하여 행 이동(next() 메소드)후 getXXX() 메소드를 이용해 데이타를 얻어와 출력
 
   5) Connection객체 및 SQL 관련 객체 종료
 
      Statment객체.close();
    
      Connection객체.close();


● Transation 사용 방법

  - Application에서 실행된 SQL 명령은 Auto Commit

  - Connection객체.setAutoCommit(false); 을 이용해 트렌젝션을 사용할 수 있다.


● ResultSet 객체

  - DB에서 select된 정보를 저장하기 위한 객체 => 2차원 배열 형식으로 표현

  - ResultSet 객체에 존재하는 커서를 이용하여 데이타(행)을 이동하여 필드값(열)을 얻어올 수 있다.

    => ResultSet객체.next() : 커서를 아래로 이동하며 데이타가 있을 경우 true를 반환

  - ResultSet객체의 커서 위치에 존재하는 행의 필드값은 getXXX() 메소드를 이용하여 값을 얻어온다.

    => ResultSet객체.getXXXX(index 또는 필드명) 

    => XXXX는 자료형을 뜻하면 자료형을 모를 경우 String을 사용한다.

  ※ ResultSetMetaData 객체 : 검색된 테이블의 정보(열의 갯수,데이타 타입등)를 저장한 객체


● Statement 및 PreparedStatement  => 명령 객체

  - Statement => 완성된 형식의 SQL 명령을 실행

  - PreparedStatement => 미완성된 형식의 SQL 명령을 실행(SQL명령에 Java 변수 사용시)

    => InParameter를 사용하며 setXXX() 메소드를 이용해 SQL 명령을 완성한다.    


● 컨텍션풀(ConnectionPool)

  - ConnectionPool : Connection 객체를 미리 만들어 놓은 클래스

  - ConnectionPool을 만들어 주는 이유

    => 미리 Connection 객체를 만들어 필요한 경우 바로 사용 가능 - 빠른 실행 가능     

    => Connection 객체의 숫자를 제어
  
  - ConnectionPool을 사용하는 방법 

    => ConnectionPool 클래스 사용 또는 WAS(Apache) DBCP(DataBase ConnectionPool) 사용

  - ConnectionPool 클래스 사용
 
    주의) db.properties 파일을 src 디렉토리에 복사  

    주의) 생성자를 이용하여 ConnectionPool 객체 생성 불가 => 생성자가 private 접근지정자를 가지고 있기 때문

          ex) ConnectionPool pool=new ConnectionPool(); 

          왜??? ConnectionPool 객체가 여러 개 생성되는 것을 막기 위해 => SingleTon 기법


● DTO 클래스 및 DAO 클래스

  - DTO(Data Transfer Object) 클래스 => VO 클래스, JavaBean 클래스

    => Table의 정보를 저장하기 위한 클래스

    => Table의 필드와 동일한 자료형을 가지고 있는 멤버변수와 생성자, Setter & Getter 메소드로 구현

  - DAO(Data Access Object) 클래스 => Manager 클래스

    => Table과의 작업을 전담하는 클래스

    => 테이블의 데이타 삽입,삭제,변경,검색등의 메소드 구현