2022.09.05/JDBC/DBMS

Jimin·2022년 9월 6일
0

비트캠프

목록 보기
36/60
post-thumbnail
  • JDBC 프로그래밍(com.eomcs.jdbc.*)
    • DBMS Native API 와 ODBC API 개념
    • JDBC Driver 유형
    • JDBC 프로그래밍 절차
    • Driver 구현체 생성 및 DriverManager에 등록하는 방법
    • DBMS에 연결하는 방법

데이터 모델링


데이터 모델링?

데이터가 중복되지 않도록 적절하게 테이블을 쪼개는 것
데이터 항목에 대해서 중복되냐 중복되지 않느냐 설정하는 것(unique 설정)

DBMS Native API 등장

1. 사용자가 직접 SQL을 작성하는 경우


사용자가 바로 SQL을 작성하는 경우, 바로 DBMS Server에 접근하지 못하고 DBMS Client의 도움을 받아서 SQL에 대한 결과를 출력 받는다.

2. 사용자가 App을 통해 SQL을 작성하는 경우

DBMS API(DBMS Native API)

  • DBMS Client 역할을 한다.
  • 사람이 아니라 Application이 사용한다.
    → Application은 DBMS Client를 사용할 수 없기 때문에, DBMS API(Native API)를 이용하여 SQL을 호출한다.
    APP에서 DBMS Server에게 SQL을 보낼 때 사용하는 메서드(함수)
  • 언어별로 제공한다.
    • C/C++
    • python
    • ...

DBMS Native API

단점

DBMS에 맞추어 APP을 개발한다.
→ DBMS에 종속된다.
⇒ DBMS마다 개발해야한다.


ODBC API

Open DataBase Connectivity (개방된 데이터베이스 연결자)

ODBC API 등장 이유?

→ DBMS 제조사 마다 코딩하지 않고 통일시키기 위하여 등장하였다.
그러나, 이건 C/C++ 위주이다.

ODBC Driver

  • ODBC API 규격에 따라 API를 만들었다. (규격!)
    ⇒ DBMS 제조자 마음대로가 아니라! ODBC API 표준 규격에 따라 API를 만들었다.
  • API 규격이 같기 때문에, 메서드 호출 코드도 동일하다.
    ⇒ DBMS마다 코드를 변경할 필요가 없다.

Java에서 DBMS와 연결할 Java전용 API가 필요!

Java에서는 C/C++ 코드를 직접 호출할 수 없으므로 Java DBMS API를 이용해야 한다.
즉, C/C++로 작성된 ODBC API를 호출하기 위해서 Java API가 필요하기 때문에
Java APIJava DataBase Connectivity API인 JDBC가 등장하게 된다.


JDBC API

자바에서 DBMS와 연결할 때 사용하는 객체의 호출 규격을 정의한 것. (인터페이스)

1. Type 1 드라이버

  • JRE에 기본으로 포함되어 있다.
  • ODBC Driver 호출
  • Local에 ODBC Driver 설치 필요

JDBC Driver

  • JDBC API 규격에 따라 클래스와 메서드를 구현
  • ODBC API를 호출하는 JDBC Driver를 Type1 Driver 라고 한다.
  • 1Type1 DriverODBC-JDBC Bridge Driver 라고도 불린다.
    ODBC와 JDBC의 다리 역할을 하기 때문이다.
  • Local에 ODBC Driver가 설치되어 있어야 한다.

2. Type 2 드라이버

DBMS Native Call Driver

Native API: DBMS 전용 API

  • DBMS Native API 호출
  • Local에서 DBMS API 설치 필요
  • DBMS Vendor로부터 다운로드 받아야한다.
  • Type2 드라이버 역시 JDBC API 규격에 따라 제작되었다.
  • Type1이든, Type2이든 둘 다 JDBC 규격에 따라 작성되었기 때문에 사용법이 같다.
    ⇒ 즉, 자바 Application을 변경할 필요가 없다!

3. Type 3 드라이버

Network Driver

  • DBMS가 변경되면, Native API/ODBC API/Type2 Driver를 변경해야한다.
    ⇒ DBMS에 종속되는 문제를 해결하고자 나온 Type3 Driver ← 중간 서버를 통해서 해결한다.
  • Type 3 Driver는 DBMS를 바꾸더라도, Local쪽은 변경할 필요가 없다. (Remote1에서 변경한다.)
  • Local에는 DBMS와 관련된 파일을 설치할 필요가 없다. (Remote1에서 변경한다.)

4. Type4 드라이버

DBMS Protocol Driver

  • Local에 ODBC API/Native API를 설치해야하는 문제를 해결한 것.
    ⇒ DBMS 서버와 직접 통신한다.
  • DBMS Vendor에서 다운로드해야한다.
    DBMS가 변경되면 Driver도 변경된다.
  • Local에 DBMS관련 ODBC API나 Native API를 설치할 필요가 없다.
    ODBC API나 Native API는 C/C++ 언어로 작성되어 있기 때문에 OS에 종속된다.
  • JDBC 드라이버만 설치한다.
    ⇒ Pure Java
    → Java 언어로만 구성되어 있다.

JDBC Programming


1. JDBC Driver 다운로드
2. JDBC 프로젝트 classpath에 추가
3. JDBC API 규격에 따라 Call


JDBC Programming 절차

  1. java.sql.Driver 구현체 준비 ← JDBC Driver에 대한 정보를 가지고 있다.
  2. java.sql.DriverManager에 Driver 구현체 등록
  3. DriverManager를 통해 java.sql.Connection 객체 얻기 ← DBMS와의 연결성을 가지고 있다.
  4. Connection을 통해 java.sql.Statement/preparedStatement 객체를 준비시킨다. ← SQL을 서버에 보내고 응답을 받는 일을 한다.
  5. Statement/preparedStatment를 통해 java.sql.ResultSet을 얻는다. ← DBMS의 select 결과를 한 개씩 가져오는 일을 한다.

JDBC API의 기본 객체

밑의 각 네모가 무슨 역할을 수행하는 지만 알아도 좋다!


JDBC API의 기본 객체 - 메서드 호출


DBMS에 연결하기

  • Driver 객체를 직접 사용하여 DBMS에 연결하지 않고 대신 DriverManager를 통해 연결한다.

  • DriverManager에게 연결할 DBMS의 정보(jdbc URL)를 주면 해당 DBMS의 Driver 객체를 찾아 connect()를 호출한다.

  • jdbc url : DBMS 서버 정보.
    예) jdbc:DBMS://서버주소:포트/데이터베이스명
    (포트번호를 지정하지 않으면 mysql인 경우 3306번이 포트번호로 사용된다.)
    username : DBMS 사용자 아이디
    password : DBMS 사용자 암호

  • Driver를 DriverManager에 등록시켜서 대신 DBMS 처리를 부탁한다.
    ⇒ 즉, Driver 객체의 connect()를 호출한다.
    [App]...................[DriverManager].............[Driver 구현체]
    ..| getConnection()............|............................|
    ..|--------------------------->|............................|
    ..|............................|......connect().............|
    ..|............................|--------------------------->|
    ..|............................|............................|-> new MariaDbConnection()
    ..|............................|..........return............|
    ..|........return..............|<---------------------------|
    ..|<---------------------------|............................|


try-catch-resources 문법 활용


Statement 객체 사용법:

1. INSERT/UPDATE/DELETE 등 DML 관련 SQL문 전송

executeUpdate()

리턴값: 변경(insert/update/delete)된 데이터의 개수

2. SELECT 등 DQL 관련 SQL문 전송

executeQuery()

  • 리턴값: 서버에서 데이터를 가져오는 일을 할 객체인 java.sql.ResultSet 구현 객체
  • DBMS 서버에 select 문을 보낸다.
profile
https://github.com/Dingadung

0개의 댓글