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 드라이버) 이용
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();
}
}
}
}