JDBC
-
DAO와 DTO를 이용한 JDBC 실습(2)2020.11.09
-
DAO와 DTO를 이용한 JDBC 실습(1)2020.11.08
-
DAO와 DTO란?2020.11.08
-
JDBC 프로그래밍 절차2020.11.07
-
JDBC 사전 설정2020.11.07
-
JDBC란?2020.11.07
DAO와 DTO를 이용한 JDBC 실습(2)
※ 데이터베이스를 연동하여 성적 처리 프로그램을 구현한다.
여러 명의 이름, 국어점수, 영어점수, 수학점수를 입력받아
총점, 평균을 연산하여 출력하는 프로그램을 구현한다.
출력 시 번호(이름, 총점 등) 오름차순 정렬하여 출력한다.
(단, DAO 와 DTO클래스를 활용한다.)
실행 예)
'JDBC' 카테고리의 다른 글
DAO와 DTO를 이용한 JDBC 실습(1) (0) | 2020.11.08 |
---|---|
DAO와 DTO란? (0) | 2020.11.08 |
JDBC 프로그래밍 절차 (0) | 2020.11.07 |
JDBC 사전 설정 (0) | 2020.11.07 |
JDBC란? (0) | 2020.11.07 |
DAO와 DTO를 이용한 JDBC 실습(1)
※ 데이터베이스에 TBL_MEMBER(이름, 전화번호) 테이블을 생성하고
이를 활용하여 이름과 전화번호를 여러 건 입력받고 결과를 전체
출력하는 기능을 가진 프로그램을 구현한다.
(단, DAO 와 DTO클래스를 활용한다.)
실행 예)
'JDBC' 카테고리의 다른 글
DAO와 DTO를 이용한 JDBC 실습(2) (0) | 2020.11.09 |
---|---|
DAO와 DTO란? (0) | 2020.11.08 |
JDBC 프로그래밍 절차 (0) | 2020.11.07 |
JDBC 사전 설정 (0) | 2020.11.07 |
JDBC란? (0) | 2020.11.07 |
DAO와 DTO란?
○ DAO(Date Access Object)
데이터에 접근을 목적으로 하는 객체. 리소스를 매우 크게 소모하는 커넥션 객체를 하나만 두고
여러 사용자가 DAO 인터페이스를 사용하여 필요한 데이터에 접근할 수 있도록 한다.
즉, Database 와 연계하여 처리할 프로그램을 규정화 해 둔 클래스를 의미한다.
- DTO 객체를 만들어 편집 및 조작을 한다.
- DTO 를 데이터베이스 서버에 저장하기도 하고 데이터베이스 서버로부터 레코드를 select 해서 DTO 객체로
변형해 가져오기도 한다.
- insert, update, delete, select 등 데이터 액션 처리를 주 목적으로 한다.
DAO 예시 코드
public class MemberDAO { // 주요 변수 선언 → DB 연결 객체 private Connection conn; // 생성자 정의 → 사용자 정의 생성자 public MemberDAO() throws ClassNotFoundException, SQLException { // DB 연결 conn = DBConn.getConnection(); } // 기능 → 메소드 정의 → 데이터를 입력하는 기능 → insert 쿼리문 수행 public int add(MemberDTO dto) throws SQLException { ... } // 기능 → 메소드 정의 → 인원 수를 파악하는 기능 → select 쿼리문 수행 public int count() throws SQLException { ... } // 기능 → 메소드 정의 → 데이터 전체를 조회하는 기능 → select 쿼리문 수행 public ArrayList<MemberDTO> lists() throws SQLException { ... } // 기능 → 메소드 정의 → 데이터베이스 연결 종료 public void close() throws SQLException { DBConn.close(); } }// end MemberDAO
○ DTO(Data Transfer Object)
데이터가 포함된 객체를 특정 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체
메소드 호출 횟수를 줄이기 위해 데이터를 담고 있는 객체이다.
즉, 데이터를 하나의 객체로 관리할 목적으로 만들어 둔 클래스의 객체를 의미한다.
setter 와 getter 메소드를 가지고 직렬화(Serializable)를 구현한다.
- 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환될 수 있다.
- 일반적으로 하나의 데이터베이스 레코드를 저장하며 레코드와 같은 구조를 가지고 있는 경우가 많다.
- 하나의 레코드는 빈즈 클래스 하나로 매핑된다.
DTO 예시 코드
public class MemberDTO { // 주요 속성 구성 private String sid, name, tel; // getter / setter 구성 public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } }
○ VO(Value Object)
Value Object 는 관계형 데이터베이스의 레코드에 대응되는 자바 클래스.
형태는 DB 레코드를 구성하는 필드들을 Value Object 의 Attribute 로 하고,
해당 변수에 접근할 수 있는 setter, getter 메소드의 조합으로 형성된 클래스이다.
특성은 대체로 불변성이고, equals() 메소드를 통해 비교할 경우 객체를 구성하고 있는 모든 값을 비교해야 한다.
※ DTO 와 유사한 개념이지만, 특정 비즈니스 로직만 전달한다는 것으로 이해하는 것이 구분에 용이하다.
즉, 일반적으로 Value Object 는 read only 속성을 갖는다.
- Network Traffic 을 줄여 성능을 향상시킬 수 있다.
- 장점으로는 비 서버 측에 해당하는 클라이언트도 네트워크 오버레드 ㅇ벗이 영속적 데이터베이스에
액세스 할 수 있다는 점이다.
- 데이터 전달을 위해 가장 효율적인 방법이지만, 클래스의 선언을 하기 위해서는 많은 코드가 필요하다.
즉, 파일 수가 많아지게 되고 관리도 힘들어지게 된다는 단점이 있다.
※ VO 와 DTO 비교
VO 와 DTO 의 차이점은 특정한 비즈니스 로직을 담는 객체를 VO 라고 하고 레이어 간의 통신 용도로
오가는 객체를 DTO 라고 한다. 실무적으로도 대부분의 사람들이 VO 와 DTO 를 거의 같은 개념으로 다루고 있다.
'JDBC' 카테고리의 다른 글
DAO와 DTO를 이용한 JDBC 실습(2) (0) | 2020.11.09 |
---|---|
DAO와 DTO를 이용한 JDBC 실습(1) (0) | 2020.11.08 |
JDBC 프로그래밍 절차 (0) | 2020.11.07 |
JDBC 사전 설정 (0) | 2020.11.07 |
JDBC란? (0) | 2020.11.07 |
JDBC 프로그래밍 절차
JDBC프로그래밍 절차
JDBC 프로그래밍을 하기 위한 절차는 크게 여섯개의 과정으로 나뉜다.
① 드라이버 로딩 :
Class.forName() - Oracle Driver 를 Java 에서 사용하기 위해 드라이버를 JVM 에 로딩하는 과정
② 커넥션 할당받기 :
DriverManager.getConnection()
③ 쿼리문 전송을 위한 Statement 또는 PreparedStatement 할당받기 :
conn.createStatement() 또는 conn.preparedStatement() 또는 conn.prepareCall()
④ Statement 또는 PreparedStatement 를 통한 쿼리문 전송
○ DML(insert, update, delete) 문인 경우
: int updateCount = stmt.executeUpdate(sql);
→ 영향받은 레코드 수(적용된 행의 갯수) 반환
○ select 문인 경우
: ResultSet rs = stmt.executeQuery(sql);
→ 결과 집합의 형태로 ResultSet 반환
⑤ (select 구문의 경우) ResultSet 의 논리적 커서 이동을 통해 각 컬럼의 데이터를 바인딩 해 온다.
boolean b = rs.next();
→ 커서 이동.
커서가 위치한 지점에 레코드가 존재하면 true 반환, 없으면 false 반환.
커서는 가장 선두 첫 번째 레코드 직전에 위치하고 있다가 『next()』 메소드가 호출되면 진행한다.
⑥ 사용을 마친 리소스 반납
rs.close(); → ResultSet 를 사용했을 경우
st.mtclose(); → Statement 를 사용했을 경우
dbConn.close();
(null 체크하여 close() 해 주는 것을 권장. finally 블럭에서 구현하는 것을 권장.)
이제 이 절차들을 소스코드로 세세히 살펴보자.
우선 데이터베이스와 자바의 연결을 위해 연결 객체 생성 전용 클래스인 DBConn을 만든다.
DB 연결 과정이 가장 부하가 크기 때문에 연결이 필요할 때 마다 객체를 생성하는 것이 아닌
한 번 연결된 객체를 계속 사용할 수 있도록 싱글톤이라는 디자인 패턴을 이용한다.
/*================== DBConn.java ===================*/ package com.util; import java.sql.Connection; import java.sql.DriverManager; public class DBConn { // 변수 선언 private static Connection dbConn; //-- 자동으로 초기화 지원 → null // 메소드 정의 public static Connection getConnection() { // 한 번 연결된 객체를 계속 사용... // 즉, 연결되지 않은 경우에만 연결을 시도하겠다는 의미 // → singleton(디자인 패턴) if(dbConn == null) { try { String url = "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:xe"; // 『xxx.xxx.xxx.xxx』는 오라클 서버의 IP 주소를 기재하는 부분 // 『1521』은 오라클 port number // 『xe』는 오라클 sid(express edition 은 xe) String user = "scott"; //-- 오라클 사용자 계정 이름 String pwd = "tiger"; //-- 오라클 사용자 계정 암호 Class.forName("oracle.jdbc.driver.OracleDriver"); //-- OracleDriver 클래스에 대한 객체 생성 // 드라이버 로딩 → JVM에 전달 dbConn = DriverManager.getConnection(url, user,pwd); //-- 오라클 서버 실제 연결 // 위 (line 32 ~ 41)는... 연결을 위한 환경을 설정하는 과정 // 갖고 있는 인자값(매개변수)은 오라클 주소, 계정명, 패스워드 } catch(Exception e) //(ClassNotFoundException, SQLException) { System.out.println(e.toString()); //-- 오라클 서버 연결 실패 시... 오류 메세지 출력하는 부분 } // 구성된 연결 객체 반환 return dbConn; } return dbConn; }//end getConnection() // getConnection() 메소드의 오버로딩 → public static Connection getConnection(String url, String user, String pwd) { if(dbConn == null) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); dbConn = DriverManager.getConnection(url, user, pwd); } catch (Exception e) { System.out.println(e.toString()); } } // 구성된 연결 객체 반환 return dbConn; }//end getConnection(url, user, pwd) // 메소드 정의 → 연결 종료 메소드 public static void close() { // dbConn 변수(멤버 변수)는 // Database 가 연결된 상태일 경우 Connection 을 갖는다. // 연결되지 않은 상태라면 null 인 상태가 된다. if(dbConn != null) { try { // 연결 객체의 isClosed() 메소드를 통해 연결상태 확인 //-- 연결이 닫혀있는 경우 true 반환 // 연결이 닫히지 않은 경우 false 반환 if(!dbConn.isClosed()) { dbConn.close(); //-- 연결 객체의 close() 메소드 호출을 통해 연결 종료 } } catch(Exception e) { System.out.println(e.toString()); } } // 연결 객체 초기화 dbConn = null; }//end close() }
이제 이 클래스를 이용해 객체를 생성해 데이터베이스에 연결을 시도해보자.
/*==================== DBConn연결 테스트 ======================*/ package com.test; import java.sql.Connection; import com.util.DBConn; public class Test001 { public static void main(String[] args) { Connection conn = DBConn.getConnection(); if (conn != null) { System.out.println("데이터베이스 연결 성공~!!!"); } DBConn.close(); } }
실행 결과
이제 여섯가지 단계중 두가지 단계인 드라이버 로딩 및 커넥션 할당받기를 완료하였다.
다음 단계인 쿼리문 전송을 위한 처리를 실습하기 앞서 Statement()에 대해 알아보자.
쿼리문을 처리하기 위한 과정을 크게 세가지로 바라본다면,
① 작업 객체를 만든다.
여기서 말하는 작업객체란 Statement 객체이다.
Connection클래스의 createStatement()메소드로 Statement 객체로
반환 받을 수 있다.
② 쿼리문을 작성한다.
문자열 변수를 실행하고자 할 쿼리문으로 초기화 한다.
※주의
1. 쿼리문 끝에 『;』을 붙이지 않는다.
2. 자바에서 실행한 DML 구문은 내부적으로 자동 COMMIT 된다.
3. 오라클에서 트랜잭션 처리가 끝나지 않으면 데이터 액션 처리가 이루어 지지 않는다.
(즉, 오라클에서 직접 쿼리문을 테스트할 경우 COMMIT 또는 ROLLBACK 을 반드시 수행할 수 있도록 한다.)
③ 작업객체를 활용하여 쿼리문을 실행한다.
생성된 작업객체를 활용하여 쿼리를 실행할 때에는 두가지 경우가 있다.
1. DML구문(INSERT, DELETE, UPDATE) 을 실행하는 경우
Statement 객체의 executeUpdate(sql) 메소드를 사용한다.
파라미터의 쿼리를 수행한 후 적용된 행의 갯수를 반환한다.
※ 주의
데이터 입력 쿼리는 한 번 실행하면 다시 실행하지 못한다. 즉, 다시 실행하면 에러 발생한다.
(기본키 제약조건이 설정되어 있으므로... )
2. SELECT문을 실행하는 경우
Statement 객체의 executeQuery(sql) 메소드를 사용한다.
파라미터의 쿼리를 수행한 후 결과값을 ResultSet으로 반환한다.
반환된 ResultSet을 커서를 이용하여 데이터를 확인할 수 있다.
DML구문 실행 예
package com.test; import java.sql.Connection; import java.sql.Statement; import java.util.Scanner; import com.util.DBConn; public class Test003 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Connection conn = DBConn.getConnection(); do { System.out.println("번호를 입력하세요(-1 종료) : "); String sid = sc.next(); // 반복문의 조건을 무너뜨리는 코드 구성 if (sid.contentEquals("-1")) break; System.out.println("이름을 입력하세요 : "); String name = sc.next(); System.out.println("전화번호를 입력하세요 : "); String tel = sc.next(); if (conn != null) // 연결이 이루어진 상황이라면... { System.out.println(">> 데이터베이스 연결 성공~!!!"); try { // 작업 객체 생성 Statement stmt = conn.createStatement(); // 쿼리문 준비 String sql = String.format("INSERT INTO TBL_MEMBER(SID, NAME, TEL)" + " VALUES(%s, '%s', '%s')" , sid, name, tel); // 쿼리문 수행 // - 특정 내용을 데이터베이스에 적용해야 하는 경우 // → 『executeUpdate()』 메소드 사용 int result = stmt.executeUpdate(sql); if (result > 0) System.out.println("회원 정보가 입력되었습니다."); stmt.close(); } catch (Exception e) { System.out.println(e.toString()); } } } while( true); sc.close(); DBConn.close(); System.out.println("데이터베이스 연결 닫힘~!!!"); System.out.println("프로그램 종료됨~!!!"); } }
실행 결과
SELECT문 실행 예
public class Test004 { public static void main(String[] args) { // 데이터베이스 연결 객체 생성 Connection conn = DBConn.getConnection(); if (conn != null) { System.out.println(">> 데이터베이스 연결 성공~!!!"); try { // 작업 객체 생성 Statement stmt = conn.createStatement(); // 쿼리문 준비 String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY 1"; // 쿼리문 수행 → 결과집합 수신 ResultSet rs = stmt.executeQuery(sql); // executeQuery() 메소드를 사용하면 // 질의 결과를 ResultSet 객체로 가져올 수 있다. // 하지만, ResultSet 객체가 질의에 대한 결과물 모두를 // 한꺼번에 받아서 가지고 있는 구조가 아니다 // 단지, 데이터베이스로부터 획득한 질의 결과물에 대한 // 관리가 가능한 상태가 되는 것이다. // 이 때문에... ResultSet 을 수신했다고 해서 // 데이터베이스와의 연결을 끊게 되면 // ResultSet 객체는 더 이상 질의 결과를 관리할 수 없게 된다. // ResultSet 의 다음 값의 존재 여부 확인(반환) → true / false // 반복문을 활용한 ResultSet 컨트롤 while(rs.next()) { String sid = rs.getString("SID"); // String sid = rs.getString(1) String name = rs.getString("NAME"); // String name = rs.getString(2) String tel = rs.getString("TEL"); // String tel = rs.getString(3) String str = String.format("%3s %8s %12s", sid, name, tel); System.out.println(str); } rs.close(); // 결과집합 리소스 반납 stmt.close(); // 작업객체 리소스 반납 } catch(Exception e) { System.out.println(e.toString()); } } // end if DBConn.close(); // 연결객체 리소스 반납 System.out.println("데이터베이스 연결 닫힘"); System.out.println("프로그램 종료됨~!!!"); } }
실행 결과
'JDBC' 카테고리의 다른 글
DAO와 DTO를 이용한 JDBC 실습(2) (0) | 2020.11.09 |
---|---|
DAO와 DTO를 이용한 JDBC 실습(1) (0) | 2020.11.08 |
DAO와 DTO란? (0) | 2020.11.08 |
JDBC 사전 설정 (0) | 2020.11.07 |
JDBC란? (0) | 2020.11.07 |
JDBC 사전 설정
Java 환경에서 DBMS를 활용하기 위해 JDBC를 연동을 하고자 하면 다음과 같은 경우가 있다.
학습 환경에서는 오라클이 로컬에 설치된 경우가 대다수일 것이고, 실무환경에서는 오라클이
로컬에 설치된 경우보다는 sql developer를 이용해 서버에 접속해 사용하기 때문에 JDBC 드라이버를
따로 다운로드 후 설정해야하므로 이를 잘 숙지해 둘 필요가 있다.
해당 환경에 오라클이 설치된 경우 (학습 환경)
① 시스템의 classpath를 다음과 같이 변경한다.
이 과정에서는 오라클의 버전에 따라 차이가 있으므로 버전을 잘 숙지하고 설정할 수 있도록 한다.
현재 가장 보편적으로 버전인 10g, 11g는 다음과 같이 설정하면 된다. 필자는 11g를 사용하므로
11g의 경로를 입력하였다.
(ex1. 11g Express Edition 설치 경로가 『C:\oraclexe』인 경우...)
『.;C:\oraclexe\app\oracle\product\1120\server\jdbc\lib\ojdbc6jar 』
(ex2. 10g Enterprise Edition 설치 경로가 『C:\oracle』인 경우...)
『.;C:\oracle\product\10xxx\db_1\jdbc\lib\ojdbc14jar』
② JDBC 드라이버 설치를 위한 ojdbc6.jar 파일을 다음의 경로에 복사&붙여넣기 한다.
위에서 지정한 환경변수의 경로는 오라클이 설치된 경로에서 ojdbc6.jar이 존재하는 경로이다.
위 경로에 존재하는 ojdbc6.jar 파일을 복사하여 아래의 경로들에 붙여넣기 한다.
1. C:\Program Files\Java\jdkx.x.x\jre\lib\ext
2. C:\Program Files\Java\jrex.x.x\lib\ext
해당 환경에 오라클이 설치되어 있지 않은 경우(실무 환경)
① Oracle 용 JDBC 드라이버를 다운로드 해야 한다.
2. 『Support』메뉴 클릭
3. 『Lifetime Support Policies』 항목의 『Software Downloads』 클릭
4. 『Drivers and Utilities』 클릭
5. 『JDBC Drivers』클릭
6. 서버의 오라클 버전과 일치하는 드라이버 클릭
7. 『설치된 jdk 버전에 맞는 ojdbc 파일』 클릭 → 다운로드
ojdbc13 = jdk1.3 / ojdbc14 = jdk1.4 / ojdbc5 = jdk1.5 / ojdbc6 = jdk1.6
② 시스템의 classpath를 다음과 같이 변경한다. (위와 같다.)
③ JDBC 드라이버 설치를 위한 ojdbc.jar 파일을 다음의 경로에 복사&붙여넣기 한다. (위와 같다.)
JSP&Servlet 실습을 위한 추가 설정
① 아파치 톰캣을 다운로드 한다. → tomcat.apache.org
Apache Tomcat® - Welcome!
The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies. The Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket specifications ar
tomcat.apache.org
② 웹 서버에서 실질적으로 Oracle 용 JDBC 드라이버를 찾는 경로인 『아파치톰캣루트\lib』 에
ojdbc파일을 복사&붙여넣기한다.
'JDBC' 카테고리의 다른 글
DAO와 DTO를 이용한 JDBC 실습(2) (0) | 2020.11.09 |
---|---|
DAO와 DTO를 이용한 JDBC 실습(1) (0) | 2020.11.08 |
DAO와 DTO란? (0) | 2020.11.08 |
JDBC 프로그래밍 절차 (0) | 2020.11.07 |
JDBC란? (0) | 2020.11.07 |
JDBC란?
JDBC(Java Database Connectivity)는 자바 프로그램이 DBMS에 일관된 방식으로 접근할 수 있도록
API 를 제공하는 자바 클래스들의 모임으로 다음과 같은 특징을 가진다.
1) JDBC 는 함수 호출용 SQL 인터페이스
2) JDBC 는 ANSI SQL -92 표준을 지원
3) JDBC 는 공통되 SQL 인터페이스를 바탕
4) JDBC 는 익히고 사용하기 쉽다.
==> JDBC 란 데이터베이스에 연결 및 작업을 하기 위한 JAVA 의 표준 인터페이스이다.
JDBC의 구성
1) 응용 프로그램
a. 데이터베이스에 연결을 요청
b. 데이터베이스에 SQL문을 전송
c. SQL문의 처리 결과 요청
d. 오류가 발생하는 경우에 오류 처리
e. 트랜잭션을 제어
f. 연결 종료
2) 드라이버 매니저
a. 데이터베이스에 맞는 드라이버 검색
b. JDBC 초기화를 위한 작업 수행
3) 드라이버
a. 데이터베이스에 연결
b. 데이터베이스에 SQL문을 전달
c. 응용 프로그램에 검색 결과를 전달
d. 필요한 경우 커서를 조작
e. 필요한 경우 트랜잭션을 시작
4) DBMS
a. 데이터가 저장되어 있는 장소
System Architecture
JDBC API 는 2-tier 와 3-tier 를 모두 지원한다.
※ tier
일련의 유사한 객체가 나열된 상태에서 계층 또는 열을 나타낸다.
프로그램의 일부가 여러 객체에 나뉘어 존재할 수 있으며
그 계층 또한 네트워크 상에서 다른 컴퓨터에 위치할 수 있다.
1) 2-tier
a. 자바 애플릿이나 어플리케이션이 JDBC 를 이용하여 DBMS 에 직접 접근
b. 가장 대표적인 C/S 구조
c. 프로그래밍이 간단하다는 장점
d. 보안, 로드밸런싱, 확장성(오브젝트 재사용) 등의 문제점
e. 2-tier 디자인이 적합한 경우
- 애플리케이션이 하나의 데이터베이스만을 사용
- 데이터베이스 엔진이 하나의 CPU 에서 동작
- 데이터베이스가 계속 거의 같은 크기로 유지
- 사용자 기반이 같은 크기로 유지
- 요구가 확정되어 변환 가능성이 극히 적거나 없는 경우
- 애플리케이션을 종료한 후에도 최소한의 지속성을 요구하는 경우
2) 3-tier
a. 자바 애플릿이나 어플리케이션이 DBMS 에 직접 접근하는 것이 아니라
중간에 미들웨어(미들티어)를 거쳐서 데이터베이스에 접근
b. 데이터베이스와의 연동 부분을 분리시킴으로써
Presentation Layer 가 데이터 저장 방법에 신경을 쓰지 않아도 된다.
c. 클라이언트는 단지 미들티어를 참조
d. 미들티어 서버는 DBMS 와 같이 특정한 작업만 수행하는 최종 서버와
통신을 하여 결과를 얻은 후
이 결과를 클라이언트에 전달
e. 2-tier 모델보다 안정적이고 유연하며 보안이 강화
- tier 1 : 사용자 인터페이스를 담당하는 클라이언트
- tier 2 : http, 코바(CORBA) 등을 지원하는 응용 처리 서버
- tier 3 : DBMS와 같이 사용자가 최종적으로 원하는 기능을 수행할 서버
JDBC Driver 유형
1) Type 1 (현재 거의 사용 X)
- JDBC-ODBC Driver
- 특징
가. 데이터베이스를 연동하기 위해 브릿지 기술을 사용
나. ODBC API로의 게이트웨이를 제공하여
실제로는 ODBC 의 API 를 구현함으로써 데이터베이스를 연동
다. 브릿지 솔루션은 보통 클라이언트에 소프트웨어가 설치될 것을 요구
라. JDBC-ODBC Driver 는 ODBC Driver 가 풀부하기 때문에
거의 대부분 데이터베이스 시스템에서 사용할 수 있으며,
JDBC-ODBC Driver 를 사용하는 클라이언트에
사전에 ODBC Driver 가 설치되어 있는 경우
매우 유용하게 사용할 수 있다.
마. 속도와 관련한 가장 큰 문제
JDBC 를 통해 호출된 명령이 다시 ODBC 를 통해 나가야 하기 때문에
두 개의 브릿지를 거치며, 이로 인해 빠른 속도를 기대하기 어렵다.
즉, 빠른 성능을 요구하는 어플리케이션의 경우에는
Type 1. JDBC-ODBC 브릿지는 적당하지 않다.
바. JDBC-ODBC 브릿지를 사용하는 시스템에는
반드시 해당 데이터베이스에 연결하기 위한
ODBC Driver 가 설치되어야 하며
이 단점은 애플릿에서 JDBC 를 사용하여 프로그래밍 해야 하는 경우,
많은 문제가 된다.
애플릿을 이용하여 JDBC-ODBC 를 사용할 경우,
애플릿을 다운받은 클라이언트에 미리 해당 ODBC Driver 가
설치되어 있어야 하기 때문에 배포 등에 많은 문제가 발생하게 된다.
2) Type 2
- Native-API / Partly Java Driver(사용 일부 자바)
- 특징
가. 각각의 데이터베이스 제조 업체들이 제공한 C 혹은 C++ 메소드를
자바 코드가 호출하는 방식.
나. 부분적으로 자바 드라이버인 원시 API 라고 일컬어짐
다. 데이터베이스와 연결되는 부분이 Native Code 로 구현되어 있는 만큼
JDBC-ODBC 브릿지에 비해 빠른 속도를 제공한다.
라. JDBC Driver 를 사용하고자 하는 각각의 클라이언트에
DBMS Vender 의 데이터베이스 라이브러리가 로드되어야 하기 때문에
인터넷이나 CS 환경에서는 사용하기 적합하지 않다.
또한, Type 3, 4 드라이버에 비해 낮은 성능
3) Type 3
- Net-Protocol / All-Java Driver(순수 자바)
- 클라이언트에서 일반적인 Network API를 이용해 보낸 정보를
서버가 Database에 독점적인 형태로 변환하는 방식
- 특징
가. 클라이언트에 존재하는 JDBC Driver 는 소켓을 사용하여
서버에 존재하는 미들웨어(Middleware) 애플리케이션에 연결
나. 애플리케이션은 클라이언트의 요청을 사용하고자 하는
데이터베이스에 독점적인 API 로 전환
다. 하나의 드라이버로 여러 개의 데이터베이스를 연동
라. 클라이언트에 소프트웨어를 설치할 필요가 없음
4) Type 4
- Native-Protocol / All-Java Driver(순수 자바)
- Database Engine 에 사용되는 Network Protocol 을
Java Socket 으로 직접 Database 에 교신하는 방식
- 특징
가. 가장 직접적인 순수 자바 솔루션
나. 거의 대부분 데이터베이스의 제조업체가 제공한다.
다. ODBC 나 Native Lib 형태로 request 를 변환하지 않기 때문에
Performance 가 매우 좋다.
또한, 특별하게 Driver 나 Lib, Middleware 등을
설치할 필요가 없기 때문에 배포 등이 매우 용이하다.
Oracle JDBC Driver
1) Type 2
오라클 『OCI Driver』라고 불리운다.
- OCI8 드라이버 : Oracle8 데이터베이스를 지원
- OCI9 드라이버 : Oracle9 데이터베이스를 지원
이러한 드라이버는 한정된 플랫폼으로 모든 오라클 드라이버는
JDK 1.0 과 1.1x 에 종속적이며 JDBC 1.22 표준을 지원한다.
또한, Net8을 포함하는 Oracle Client 를 설치해야 사용이 가능하다.
2) Type 4(이거 하나만 파악)
오라클 『Thin Driver』라고 불리운다.
자바로 작성된 Net8 의 TCP/IP 버전의 자체적인 실행을 포함하며
플랫폼에 독립적이고 실행 시간에 브라우저로 다운로드 된다.
그리고 서버 측에서는 TCP/IP Listener 가 필요하며
연결 스트링은 TNSNAMES 엔트리가 아닌 TCP/IP 주소와 포트번호이다.
URL Format → jdbc:oracle:thin:@[host]:[port]:[database]
JDBC API
JDBC API 는 데이터베이스의 데이터를 액세스할 수 있도록 제공되는
표준 자바 API 클래스와 인터페이스로 구성되며
다음의 기능을 실행하기 위한 클래스와 인터페이스를 제공한다.
- Java 프로그램에서 데이터 베이스 서버에 접속
- SQL문을 구성, 데이터베이스 서버에서 실행
- 데이터베이스 서버가 처리한 결과 가져오기
- 데이터베이스의 정보, 처리 결과에 대한 정보 등을 가져오기
※ 『java.sql*』패키지
- Java Application 으로부터 Database 를 조작하는 API 는
JDK 코어 API 로 java.sql 패키지에 설정되어 있다.
- JDBC 는 데이터베이스에 접속하기 위해
한 개의 클래스(java.sql.DriverManager)와
두 개의 인터페이스(java.sql.Driver 와 java.sql.Connection)을 사용한다.
'JDBC' 카테고리의 다른 글
DAO와 DTO를 이용한 JDBC 실습(2) (0) | 2020.11.09 |
---|---|
DAO와 DTO를 이용한 JDBC 실습(1) (0) | 2020.11.08 |
DAO와 DTO란? (0) | 2020.11.08 |
JDBC 프로그래밍 절차 (0) | 2020.11.07 |
JDBC 사전 설정 (0) | 2020.11.07 |