게으른 개발자의 끄적거림
Java DB연결 방법 완벽 정리
끄적잉
2025. 3. 20. 17:32
Java에서 데이터베이스(DB)와 연결하는 방법을 자세히 설명하겠습니다.
1. Java에서 DB 연결 개요
Java 애플리케이션이 데이터베이스와 상호작용하려면 JDBC(Java Database Connectivity) API를 사용해야 합니다. JDBC는 Java에서 데이터베이스에 연결하고 SQL을 실행할 수 있도록 도와주는 표준 인터페이스입니다.
JDBC를 이용하여 데이터베이스를 연결하는 일반적인 과정은 다음과 같습니다:
- JDBC 드라이버 로드
- 데이터베이스 연결 (Connection 객체 생성)
- SQL 실행 (Statement 또는 PreparedStatement 사용)
- 결과 처리 (ResultSet)
- 연결 종료
2. JDBC 드라이버 설정
JDBC를 사용하여 데이터베이스에 연결하려면 해당 데이터베이스에 맞는 JDBC 드라이버가 필요합니다.
(1) JDBC 드라이버 종류
JDBC 드라이버는 크게 4가지 유형이 있습니다.
- Type 1: JDBC-ODBC 브리지 드라이버
- ODBC(Open Database Connectivity)와 연동
- Windows 환경에서만 사용 가능
- 현재는 잘 사용되지 않음
- Type 2: 네이티브 API 드라이버
- 네이티브 코드(C/C++)를 통해 DB에 연결
- 데이터베이스 벤더가 제공하는 드라이버를 사용해야 함
- Type 3: 네트워크 프로토콜 드라이버
- 미들웨어 서버를 통해 DB와 연결
- 다양한 DBMS에 접근 가능
- 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에 등록합니다.
- MySQL 드라이버 다운로드: https://dev.mysql.com/downloads/connector/j/
(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)은 사용 후 반드시 닫아야 합니다.