포스트

01. JDBC 개요

JDBC 사용 객체

  • Connection : DB 연결 정보를 담은 객체. Connection 객체를 사용하여 createStatement() 메소드를 호출하여 실행.
  • Statement : Connection을 통해 SQL 문을 DB에 전달하고 실행하고, 생성된 결과(ResultSet)을 Java로 반환하는데 사용되는 객체
  • ResultSet : SELECT 질의 성공 시 Result Set 반환. SQL 질의에 의해 생성된 테이블을 담고 있다.


1) JDBC를 이용하여 애플리케이션을 만들 때 필요한 것

  • (1) Java의 JDBC 관련 인터페이스 (Java에 기본 내장된 인터페이스)
  • (2) DBMS(Oracle)
  • (3) Oracle에서 Java 애플리케이션과 연결할 때 사용할 JDBC를 상속받아 구현한 클래스 모음
    (ojdbc11.jar 라이브러리) ➡ OracleDriver.class (JDBC 드라이버) 이용

2) JDBC 코딩 절차

3) 이클립스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package edu.kh.jdbc1;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCExample {
  public static void main(String[] args){

    // 1단계 : JDBC 객체 참조 변수 선언 (java.sql 패키지의 인터페이스)
    // 2단계 : 참조 변수에 알맞은 객체 대입
    // 3단계 : SQL을 수행해서 반환 받은 결과(ResultSet)를 한행씩 접근해서 컬럼 값 얻어오기
    // 4단계 : 사용한 JDBC 객체 자원 반환( close() )
    // ResultSet, Statement, Connection 닫기 (생성 역순으로 닫는 것을 권장)

    // 1단계 : JDBC 객체 참조 변수 선언 (java.sql 패키지의 인터페이스)
    Connection conn = null; 
    // DBMS 타입,이름, IP, Port, 계정명, 비밀번호 저장
    // DBeaver 계정 접속 방법과 유사
    // DB와 Java 사이의 통로(Stream과 유사)

    Statemnet stmt = null;

    ResultSet rs = null;

    try{
      // 2단계 : 참조 변수에 알맞은 객체 대입

      // ✔ 1) DB 연결에 필요한 Oracle JDBC Driver 메모리에 로드하기 -> 객체 만들기
      Class.forName("oracle.jdbc.driver.OracleDriver"); // (패키지명 + 클래스명)
      // () 안에 작성된 클래스의 객체를 반환
      // 메모리에 객체가 생성되고, JDBC 필요시 알아서 참조해서 작성

      // ✔ 2) 연결 정보를 담을 Connection 생성
      // -> DriverManager 객체를 이용해서 Connection 객체를 만들어 얻어온다

      String type = "jdbc:oracle:thin:@"; //  Oracle은 type이 똑같음
      String ip = "localhost"; // DB 서버 컴퓨터의 IP
      // localhost == 127.0.0.1 (loop back ip)
      // 위 2개로 안될시 본인 ip 찾기 : cmd창에서 ipconfig 입력 후 IPv4 주소.
      String port = ":1521";
      String sid = ":XE";
      String user = "kh";
      String pw = "kh1234";

      conn = DriverManager.getConnection(type + ip + port + sid, id, pw);

      // ✔ 3) SQL 작성
      // Java에서 작성되는 SQL에는 ; 찍지 않기
      String sql = "SELECT EMP_ID, EMP_NAME, SALARY, HIRE_DATE FROM EMPLOYEE";

      // ✔ 4) Statement 객체 생성, Connection 객체를 통해 생성
      stmt = conn.createStatement();

      // ✔ 5) 생성된 Statement 객체에 sql을 적재하여 실행 후 결과를 받아와서 rs에 저장
      rs = stmt.excecuteQuery(sql);
      // executeQuery() : SELECT문 수행 메서드, ResultSet 반환

      // 3단계 : SQL을 수행해서 반환 받은 결과(ResultSet)를 한행씩 접근해서 컬럼 값 얻어오기
      while( rs.next() ){
        // rs.next() : rs가 참조하는 ResultSet 객 체에 한행씩 접근하여
        // 다음 행이 있으면 true, 없으면 false 반환

        // rs.get자료형("컬럼명");
        String empId = rs.getString("EMP_ID");
        String empName = rs.getString("EMP_NAME");
        int salary = rs.getInt("SALARY");
        Date hireDate = rs.getDate("HIRE_DATE");

        System.out.printf("사번 : %s / 이름 : %s / 급여 : %d / 입사일 : %s\n", empId, empName, salary, hireDate.toString() );
      }
    } catch(ClassNotFoundException e){
        System.out.println("JDBC 드라이버 경로가 잘못 작성되었습니다.");
    } catch(SQLException e){
        e.printStackTrace();
    } finally{
      // 4단계 : 사용한 JDBC 객체 자원 반환( close() )
      // ResultSet, Statement, Connection 닫기 (생성 역순으로 닫는 것을 권장)
      try {
      if( rs != null) rs.close();
        if( stmt != null) stmt.close();
        if( conn != null) conn.close();
      } catch(SQLException e) {
        e.printStackTrace();
      }
    }
  }
}