부록 - JDBC

Ui Jin·2022년 4월 24일
0

Data Base

목록 보기
8/11

JDBC란?

DataBase는 사용될 때에 주로 다른 프로그램과 같이 사용되는 경우가 많다.

간단한 예를 생각해 보더라도 대학교 학사시스템에 신입생의 정보를 넣는다고 할 때, 직접 이 Database가 있는 Server실로 가서 넣는 것이 아니라, 이 Database와 연결된 프로그램을 조작할 것이다.

따라서 우리는 이 Database와 다른 프로그램들을 연결해줄 API가 필요하다.
JDBC는 이 API중 하나로, Java에서 Database에 접근할 수 있도록 도와주는 libary이다. (Java실행파일, 즉 .jar파일이다)

(참고)
C/C++ : 주로 ODBC사용
Python : 주로 psycopg2사용


사용방법

JDBC를 사용하는 방법은 크게 다음과 같은 3가지의 과정을 거친다.

(본문의 사용환경)
Java IDE: eclipse
Database: Postgresql

1. JDBC라이브러리 추가하기

우선 JDBC를 사용하기 위해서는 JDBC를 Download하고 다음과 같이 몇가지 설정을 해주어야 한다.

1) Properties에 들어간다.

JDBC를 사용하고자 하는 Project에 우클릭일 통해 Properies설정 창에 들어간다.

2) 설치한 .jar파일을 Classpath에 추가한다.

그 후 아래와 같은 과정을 통해 미리 설치한 jar파일의 위치를 찾아 Classpath에 입력해준다.

3) JDBC와 프로그램 연결

아래의 코드는 java가 main class에서 JDBC와 연결하는 코드이다.

즉, 위와 같은 과정을 문제없이 잘 마쳤다면 Error가 발생하지 않고, PostgreSQL JDBC Driver Registered!가 Console에 정상적으로 출력될 것이다.


2. DataBase와 연결하기

DB와의 연결은 DriverManagergetConnection()함수를 통해 진행하게 된다.
이 때 이 함수의 Return값은 Connection객체이다.

1) DB와 연결

이제 다음과 같이 JDBC를 활용해 DB와 연결을 시도해보자

(참고)

DriverManager.getConnection("jdbc:postgresql://서버주소:포트번호/접속할DB이름"
							,"User이름", "PassWord")`);

3. 실행

위의 모든 과정을 Error없이 잘 마쳤다면 이제 해당 Java파일로 DB를 다룰 수 있게 된다.

DB를 제어하는 Query는 실제 DB에서 사용하던 select, update, delete, ... 등 모든 것이 가능하다.
이때, 이 Query문을 DataBase에 전달하는 방법은 다음과 같은 두가지 방법이 존재한다.

1) Statement객체

  1. Statement객체를 생성한다.
    • Code
    Statement stmt = connection.createStatement();
    • 설명
      : 이 Statement 객체를 통해서 execute함수들을 사용하게 되고, Database에 Query를 전달하게 된다.

  1. 명령을 DB에 전달한다.
    • Code
    // 1. Insertion, Deletion, Update
    stmt.executeUpdate("쿼리입력");
    // 2. Selection
    ResultSet rs = stmt.executeQuery("쿼리입력");
    • executeUpdate()
      • 인자
        : Insertion, Deletion, Update, Creat, Drop을 수행하는 쿼리 문자열
      • 리턴값
        : 반영된 Tuple의 수
        : Creat와 Drop의 경우 -1을 반환
    • executeQuery()
      • 인자
        : selection을 수행하는 쿼리 문자열
      • 리턴값
        : ResultSet객체

  1. Query결과를 가공한다.
    • executeUpdate()
      : 이 함수는 결과값이 Boolian이므로 이를 활용하면된다.
    • executeQuery()
      : 이 함수의 결과는 ResultSet객체로, 이는 하나의 Table 정보를 저장하고 있다. 이를 활용하면 된다.

(ResultSet의 객체 rs의 멤버함수)
rs.next();: 얻어온 Table의 다음 행을 가리킨다.
rs.getString("이름");: Attribute의 name을 통해 값을 불러온다.
rs.getString(인덱스);: Attribute의 index를 통해 값을 불러온다.
-인덱스는 1부터 시작한다.

(주의)
위의 함수 외에도 getInt(), getDouble()등 다양한 형식의 함수가 존재하고, 이는 실제 DB에 저장된 Attribute의 자료형에 맞추어 사용해주어야 한다.

2) PreparedStatement객체

  1. PreparedStatement객체를 생성한다.
    • Code
    PreparedStatement pStmt = conn.prepareStatement(
         					  "insert into instructor values(?, ?, ?, ?)");
    • 설명
      : Statemet객체와는 다르게 인자가 존재한다.
      : 이 인자에 수행하고자 하는 쿼리를 입력하되, 그 값은 ?로 표기한다.

  1. 객체에 값을 저장한다.
    • Code
    pStmt.setString(인덱스, "값");
    pStmt.setInt(인덱스,);
    • 설명
      : 마찬가지로 여러종류의 set함수가 존재한다.
      : 마찬가지로 실제 DB의 Attribute Type에 맞추어 사용해야 한다.

  1. 명령을 DB에 전달한다.
    • Code
    pSmt.executeUpdate();
    rs = pSmt.executeQuery();
    • Statement객체와 마찬가지로 준비된 pSmt객체를 위의 두 함수를 통해 DB와 데이터를 주고받을 수 있다.

  1. Query결과를 가공한다.
    • Statement와 마찬가지의 방법으로 결과를 가공할 수 있다.


참고사항

Statement는 문자열상수를 많이 사용해 컴퓨터의 공간을 매우매우 많이 차지한다. 따라서 PreparedStatement를 사용해 야 한다.
(나중에 실제 DB를 작업할 경우가 생길 때 Statement는 사용하지 않도록 하자.)

참고: PreparedStatement는 SQL문에서 Like키워드를 사용할경우 사용할수없다.

PreparedStatement가 제공하는 메소드는 Statement가 제공하는 메소드와 거의 같다.

profile
github로 이전 중... (https://uijinee.github.io/)

0개의 댓글