본문 바로가기
Dev/Java

JDBC 프로그래밍을 해보자 (1)

by yeonise 2022. 7. 27.

JDBC API를 이용해 데이터를 추가, 검색, 수정, 삭제할 수 있는 자바 애플리케이션을 작성하는 것을 JDBC 프로그래밍이라고 한다. 관련된 API는 대부분 java.sql 패키지에 포함되어 있다. 이를 이용하여 JDBC 프로그래밍을 해보자.


DBMS는 종류가 다양하며, 그 구조와 특징도 다 다르다. 따라서 자바는 모든 DBMS에서 공통으로 사용할 수 있는 인터페이스와 클래스로 구성된 JDBC를 제공하고, 각 DBMS 벤더는 JDBC를 구현한 JDBC 드라이버를 개발자에게 제공하고 있다. 우리는 사용하고 있는 DBMS에 맞는 JDBC 드라이버를 설치하기만 하면 편리하게 애플리케이션을 작성할 수 있다.

 

이 글에서 DBMS는 MySQL을 사용한다. 사용하는 IDE의 library에 mysql-connector-java.jar을 찾아서 추가하면 된다.


JDBC 프로그래밍은 다음 단계를 따라 진행한다.

 

1. JDBC 드라이버를 메모리에 로드하기

 

JDBC 드라이버를 사용하려면 먼저 메모리에 로드해야 한다. Class 클래스의 정적 메서드인 forName()은 인수로 나타난 클래스를 클래스 로더가 메모리에 로드할 수 있게 한다. MySQL 드라이버는 다음 실행문으로 드라이버를 메모리에 로드할 수 있다.

 

Class.forName("com.mysql.cj.jdbc.Driver");

 

forName() 메서드를 실행할 때 클래스 로더가 인수에 나타난 클래스를 찾지 못하면 ClassNotFoundException을 발생시킬 수 있으므로 반드시 예외 처리해야 한다.

 

 

 

2. 데이터베이스에 연결하기

JDBC 드라이버를 메모리에 로드했다면 데이터베이스와 연결해 Connection 객체를 생성한다. Connection 객체는 다음과 같이 DriverManager 클래스의 정적 메서드인 getConnection()을 호출해 생성한다.

 

Connection con = DriverManager.getConnection(url, user, password);

 

getConnection() 메서드가 Connection 객체를 생성하지 못한다면 SQLException을 발생시킬 수 있으므로 예외 처리해야 한다.  getConnection()의 메서드의 인수는 모두 문자열로 URL, 사용자 ID, 암호를 나타낸다. URL은 데이터베이스의 위치를 기술하는 것으로 형식은 다음과 같다.

 

jdbc:subprotocol:subname?serverTimezone=Asia/Seoul

 

subprotocol은 JDBC 드라이버를 기술하는 부분이며, subname은 '//IP주소/DB이름'으로 데이터베이스를 찾는 경로이다. 예를 들어 데이터베이스가 로컬 컴퓨터에 있고 데이터베이스 이름이 contacts라면 subprotocol과 subname으로 각각 'mysql'과 '//localhost/contacts'를 사용한다. 코드를 작성하면 다음과 같다.

 

String url = "jdbc:mysql://localhost/contacts?serverTimezone=Asia/Seoul";

 

DriverManager 클래스의 getConnection() 메서드로 Connection 객체를 생성했다면 데이터베이스와 연결된 상태라는 의미이다.

 

JDBC 드라이버 로드 및 데이터베이스 연결 과정을 하나의 예시로 정리해 보자.

 

import java.sql.*;

public class DBDemo {

    public static Connection makeConnection() {
    	String url = "jdbc:mysql://localhost/contacts?serverTimezone=Asia/Seoul";
        String user = "root";
        String password = "1234";
        Connection con = null;
        
        try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        System.out.println("데이터베이스 연결 중...");
        con = DriverManager.getConnection(url, user, password);
        System.out.println("데이터베이스 연결 성공");
        } catch (ClassNotFoundException e) {
        	System.out.println("JDBC 드라이버를 찾지 못했습니다...");
        } catch (SQLException e) {
        	System.out.println("데이터베이스 연결 실패");
        }
        return con;
	}
    
    public static void main(String[] args) {
    	makeConnection();
    }
}

 

 

 

reference 쉽게 배우는 자바 프로그래밍

댓글