반응형
 

JDBC: 개념과 활용

JDBC(Java Database Connectivity)는 자바에서 데이터베이스와 상호작용하기 위한 표준 API입니다. 이를 통해 애플리케이션에서 데이터베이스에 연결하고, 데이터를 조회하거나 수정할 수 있습니다. 이 글에서는 JDBC의 개념, 자바에서 사용하는 방법, 그리고 간단한 예제를 통해 JDBC 활용 방법을 알아보겠습니다.


JDBC란 무엇인가?

**JDBC(Java Database Connectivity)**는 자바 프로그램과 데이터베이스 간의 연결을 제공하는 API입니다. SQL 쿼리를 실행하고 데이터베이스로부터 데이터를 가져오거나 업데이트하는 작업을 수행할 수 있습니다.

JDBC의 특징:
  1. 플랫폼 독립성: 자바의 플랫폼 독립성처럼, JDBC는 다양한 데이터베이스와 호환됩니다.
  2. SQL 지원: 표준 SQL 문법을 사용하여 데이터베이스 작업 수행.
  3. 유연성: 다양한 데이터베이스 드라이버를 통해 연결 가능.
JDBC 구성 요소:
  1. DriverManager: 데이터베이스 드라이버를 관리.
  2. Connection: 데이터베이스 연결을 표현.
  3. Statement: SQL 문을 실행.
  4. ResultSet: SQL 쿼리 결과를 처리.

자바에서 JDBC 사용 방법

JDBC를 사용하여 데이터베이스와 상호작용하는 기본 흐름은 다음과 같습니다:

  1. 데이터베이스 드라이버 로드.
  2. 데이터베이스에 연결.
  3. SQL 문 실행.
  4. 결과 처리.
  5. 연결 종료.
예제: MySQL 데이터베이스 연결 및 데이터 조회
import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/exampledb"; // 데이터베이스 URL
        String username = "root"; // 사용자 이름
        String password = "password"; // 비밀번호

        String query = "SELECT * FROM users";

        try {
            // 1. 드라이버 로드
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 데이터베이스 연결
            Connection connection = DriverManager.getConnection(url, username, password);

            // 3. SQL 문 실행
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(query);

            // 4. 결과 처리
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String email = resultSet.getString("email");

                System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
            }

            // 5. 연결 종료
            resultSet.close();
            statement.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
        	e.printStackTrace();
        }
    }
}
출력 결과 (예시):
 
ID: 1, Name: Alice, Email: alice@example.com
ID: 2, Name: Bob, Email: bob@example.com

PreparedStatement 사용

PreparedStatement는 SQL 문을 미리 컴파일하여 성능을 최적화하고, SQL 인젝션 공격을 방지합니다.

예제: PreparedStatement로 데이터 삽입
String insertQuery = "INSERT INTO users (name, email) VALUES (?, ?)";

try (Connection connection = DriverManager.getConnection(url, username, password);
    PreparedStatement preparedStatement = connection.prepareStatement(insertQuery)) {

    preparedStatement.setString(1, "Charlie");
    preparedStatement.setString(2, "charlie@example.com");

    int rowsInserted = preparedStatement.executeUpdate();
    System.out.println(rowsInserted + " row(s) inserted.");

} catch (SQLException e) {
	e.printStackTrace();
}
출력 결과:
 
1 row(s) inserted.

트랜잭션 처리

JDBC는 트랜잭션 관리도 지원합니다. 여러 작업을 하나의 트랜잭션으로 묶어 처리할 수 있습니다.

예제: 트랜잭션 관리
try (Connection connection = DriverManager.getConnection(url, username, password)) {
    connection.setAutoCommit(false); // 자동 커밋 비활성화

    try (PreparedStatement stmt1 = connection.prepareStatement("UPDATE accounts SET balance = balance - ? WHERE id = ?");
        PreparedStatement stmt2 = connection.prepareStatement("UPDATE accounts SET balance = balance + ? WHERE id = ?")) {

        stmt1.setInt(1, 100);
        stmt1.setInt(2, 1);
        stmt1.executeUpdate();

        stmt2.setInt(1, 100);
        stmt2.setInt(2, 2);
        stmt2.executeUpdate();

        connection.commit(); // 트랜잭션 커밋
        System.out.println("Transaction committed successfully.");

    } catch (SQLException e) {
        connection.rollback(); // 트랜잭션 롤백
        System.out.println("Transaction rolled back due to error.");
        e.printStackTrace();
    }
} catch (SQLException e) {
	e.printStackTrace();
}
출력 결과 (성공 시):
 
Transaction committed successfully.

다양한 활용 예시

  1. 사용자 인증 시스템:
    • JDBC를 사용해 사용자 정보를 데이터베이스에서 검증.
  2. 데이터 분석:
    • 데이터베이스에서 대량의 데이터를 쿼리하여 분석.
  3. 로그 시스템:
    • 애플리케이션 로그를 데이터베이스에 저장.
  4. 보고서 생성:
    • 데이터베이스 데이터를 기반으로 보고서 생성.

마치며

JDBC는 데이터베이스와 상호작용하기 위한 강력하고 유연한 도구입니다. 데이터베이스 연결, 쿼리 실행, 트랜잭션 관리 등을 통해 강력한 데이터 중심 애플리케이션을 개발할 수 있습니다. 적절한 활용을 통해 데이터베이스 작업을 효율적으로 처리해 보세요!

 
반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] MVC 패턴  (1) 2025.01.07
[Java] SOLID 원칙  (0) 2025.01.07
[Java] 쓰레드(Thread)  (0) 2025.01.06
[Java] Collection(List / Set / Map)  (0) 2025.01.06
[Java] 의존성 역전 원칙(DIP)  (0) 2025.01.04

+ Recent posts