게으른 개발자의 끄적거림

Java DB연결 방법 완벽 정리

끄적잉 2025. 3. 20. 17:32

Java에서 데이터베이스(DB)와 연결하는 방법을 자세히 설명하겠습니다.


1. Java에서 DB 연결 개요

Java 애플리케이션이 데이터베이스와 상호작용하려면 JDBC(Java Database Connectivity) API를 사용해야 합니다. JDBC는 Java에서 데이터베이스에 연결하고 SQL을 실행할 수 있도록 도와주는 표준 인터페이스입니다.

JDBC를 이용하여 데이터베이스를 연결하는 일반적인 과정은 다음과 같습니다:

  1. JDBC 드라이버 로드
  2. 데이터베이스 연결 (Connection 객체 생성)
  3. SQL 실행 (Statement 또는 PreparedStatement 사용)
  4. 결과 처리 (ResultSet)
  5. 연결 종료

 

2. JDBC 드라이버 설정

JDBC를 사용하여 데이터베이스에 연결하려면 해당 데이터베이스에 맞는 JDBC 드라이버가 필요합니다.

(1) JDBC 드라이버 종류

JDBC 드라이버는 크게 4가지 유형이 있습니다.

  1. Type 1: JDBC-ODBC 브리지 드라이버
    • ODBC(Open Database Connectivity)와 연동
    • Windows 환경에서만 사용 가능
    • 현재는 잘 사용되지 않음
  2. Type 2: 네이티브 API 드라이버
    • 네이티브 코드(C/C++)를 통해 DB에 연결
    • 데이터베이스 벤더가 제공하는 드라이버를 사용해야 함
  3. Type 3: 네트워크 프로토콜 드라이버
    • 미들웨어 서버를 통해 DB와 연결
    • 다양한 DBMS에 접근 가능
  4. Type 4: 순수 Java 드라이버
    • Java 코드로 작성된 드라이버
    • 대부분의 최신 DBMS에서 지원

가장 많이 사용되는 드라이버는 Type 4 JDBC 드라이버입니다.


 

 

3. JDBC 연결 과정

(1) JDBC 드라이버 추가

Java 프로젝트에서 DB에 연결하려면 해당 DB의 JDBC 드라이버가 필요합니다.

① Maven 프로젝트에서 JDBC 드라이버 추가

만약 MySQL을 사용한다면, pom.xml에 다음과 같이 MySQL Connector 의존성을 추가해야 합니다.

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

② 수동으로 JDBC 드라이버 추가

JAR 파일을 다운로드 후, Java 프로젝트의 lib 폴더에 추가하고 CLASSPATH에 등록합니다.


(2) DB 연결 코드 작성

JDBC를 이용하여 Java에서 DB와 연결하는 기본적인 코드 예제입니다.

① MySQL 연결 코드

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
    private static final String URL = "jdbc:mysql://localhost:3306/testdb";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    public static void main(String[] args) {
        try {
            // 1. JDBC 드라이버 로드
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 데이터베이스 연결
            Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println("DB 연결 성공!");

            // 3. 연결 종료
            conn.close();
        } catch (ClassNotFoundException e) {
            System.out.println("JDBC 드라이버를 찾을 수 없습니다.");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패!");
            e.printStackTrace();
        }
    }
}

 

② PostgreSQL 연결 코드

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class PostgreSQLConnection {
    private static final String URL = "jdbc:postgresql://localhost:5432/testdb";
    private static final String USER = "postgres";
    private static final String PASSWORD = "password";

    public static void main(String[] args) {
        try {
            // 1. JDBC 드라이버 로드
            Class.forName("org.postgresql.Driver");

            // 2. 데이터베이스 연결
            Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println("PostgreSQL 연결 성공!");

            // 3. 연결 종료
            conn.close();
        } catch (ClassNotFoundException e) {
            System.out.println("JDBC 드라이버를 찾을 수 없습니다.");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("DB 연결 실패!");
            e.printStackTrace();
        }
    }
}

4. SQL 실행 및 데이터 처리

JDBC를 사용하여 SQL을 실행하는 방법은 Statement, PreparedStatement를 이용하는 방식이 있습니다.

(1) 데이터 삽입 (INSERT)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class InsertData {
    private static final String URL = "jdbc:mysql://localhost:3306/testdb";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    public static void main(String[] args) {
        String sql = "INSERT INTO users (name, age) VALUES (?, ?)";

        try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, "홍길동");
            pstmt.setInt(2, 25);
            int rowsAffected = pstmt.executeUpdate();
            System.out.println(rowsAffected + "개의 행이 삽입되었습니다.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

 

(2) 데이터 조회 (SELECT)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SelectData {
    private static final String URL = "jdbc:mysql://localhost:3306/testdb";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    public static void main(String[] args) {
        String sql = "SELECT * FROM users";

        try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {

            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("ID: " + id + ", 이름: " + name + ", 나이: " + age);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

5. JDBC 연결 종료 (리소스 관리)

JDBC는 DB 연결을 유지하는 동안 리소스를 사용하기 때문에 반드시 연결을 종료해야 합니다.

  • try-with-resources 문법을 사용하면 close()를 명시적으로 호출하지 않아도 자동으로 리소스를 해제합니다.
  • 연결 객체 (Connection), SQL 실행 객체 (Statement, PreparedStatement), 결과 집합 (ResultSet)은 사용 후 반드시 닫아야 합니다.