[JAVA기초] JDBC

junghan·2023년 7월 25일
0

JAVA

목록 보기
10/12
post-thumbnail

JDBC 세팅

MacOS용 MySQL Connector/j 다운

이클립스에서 MySQL을 연결하려면 JDBC 드라이버가 필요합니다. MySQL Connector/j (JAR 파일)을 다운로드 받아야한다.

MySQL을 처음 설치할 때 같이 설치했다면 설치는 건너뛰어도 가능

  1. 링크로 들어가서 본인의 버전과 SQL에 맞는 드라이버를 다운로드한다.

https://www.mysql.com/products/connector/

  1. Select Operating System 옵션을 Platform Independent로 선택한다

SQL과 자바를 연결하는 드라이버이다.

IDE와 연동

JDBC 드라이버 추가:

Eclipse를 열고 프로젝트를 생성합니다(Java 프로젝트 등).

프로젝트의 Build Path에 다운로드한 JAR 파일을 추가합니다.

프로젝트 우클릭 → Build Path → Configure Build Path → Libraries 탭 → Add External JARs...

JDBC 코드 작성:

Eclipse에서 JDBC 코드를 작성하여 MySQL과 상호작용하는 애플리케이션을 개발할 수 있습니다.
예제로 간단한 데이터 조회 코드를 작성해보겠습니다:

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database_name";
        String username = "your_mysql_username";
        String password = "your_mysql_password";

        try {
            Connection conn = DriverManager.getConnection(url, username, password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM users");

            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String email = rs.getString("email");
                System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
            }

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  • 위 코드는 'users' 테이블에서 데이터를 조회하는 간단한 예제입니다. 코드를 적절히 수정하여 데이터를 추가하고 수정하는 등의 작업을 할 수 있습니다.

코드에서 your_database_name, your_mysql_username, your_mysql_password 부분은 실제 데이터베이스 이름과 MySQL 사용자 이름, 비밀번호로 변경해야 합니다.

MySQL 서버를 외부에서 접속하려면 보안 설정을 고려해야 합니다. 개발용으로만 사용하는 경우, 로컬에서 접속하도록 설정하는 것이 좋습니다.


JDBC 프로그래밍

JDBC 프로그래밍 절차

JDBC(Java Database Connectivity) 프로그래밍은 Java 애플리케이션과 데이터베이스 간의 연결과 데이터 처리를 위한 API입니다. JDBC 프로그래밍 절차는 다음과 같습니다:

  • import java.sql.*;
  • JDBC 드라이버 로드: 데이터베이스 벤더에서 제공하는 JDBC 드라이버를 로드합니다.
    • JDBC 4.0 이상의 드라이버부터는 드라이버 로드를 생략할 수 있습니다. JDBC 4.0 이상의 드라이버는 자동으로 로드되기 때문에 개발자가 명시적으로 드라이버 로드를 해주지 않아도 됩니다.
    • DriverManager.getConnection() 메서드를 호출하여 데이터베이스와 연결을 설정할 때, 드라이버가 자동으로 로드됩니다.
  • 데이터베이스 연결: DriverManager 클래스를 사용하여 데이터베이스에 연결합니다.
  • SQL 쿼리 실행: Statement나 PreparedStatement를 사용하여 SQL 쿼리를 실행합니다.
  • 결과 처리: SQL문에 결과물이 있다면 ResultSet 객체를 생성합니다. 즉, 쿼리 실행 결과를 받아와서 필요에 따라 처리합니다.
  • 연결 해제: 데이터베이스와의 연결을 해제합니다.

Connection 클래스의 역할

Connection 클래스는 JDBC 드라이버를 통해 데이터베이스와의 연결을 관리합니다.
이 클래스는 DriverManager.getConnection() 메서드를 호출하여 데이터베이스와의 연결을 설정합니다. 또한, 연결 설정에 필요한 정보(데이터베이스 URL, 사용자 이름, 비밀번호 등)를 제공합니다.

Statement 클래스의 역할

Statement 클래스는 정적 SQL 쿼리를 데이터베이스로 보내고 실행하는 역할을 합니다.
이 클래스를 사용하여 데이터베이스에서 SELECT, INSERT, UPDATE, DELETE 등의 쿼리를 실행할 수 있습니다. 하지만 Statement는 보안과 성능 면에서 취약점이 있으며, PreparedStatement로 대체하는 것이 좋습니다.

Statement 클래스와 PreparedStatement 클래스의 차이점

  • Statement: 매번 SQL 쿼리를 실행할 때마다 데이터베이스에서 쿼리를 컴파일합니다. 즉, 반복 실행 시 매번 컴파일하므로 성능이 떨어질 수 있고 SQL Injection 공격에 취약합니다.
  • PreparedStatement: 미리 쿼리를 준비하고, 파라미터를 바인딩하여 매번 컴파일하지 않고 재사용할 수 있습니다. SQL 쿼리에 변수를 바인딩하는 방식으로 작성하며, 성능이 향상되고 SQL Injection 공격으로부터 보호됩니다.

DB 입력결과를 이용해 결과 메시지를 출력하는 방법에 대한 알고리즘 설명

Java 애플리케이션에서 JDBC를 사용하여 데이터를 입력하는 경우, 데이터베이스로부터 입력 결과를 확인하고 그에 따른 메시지를 출력하는 방법은 다음과 같습니다:

try (PreparedStatement pstmt = conn.prepareStatement(insertQuery)) {
                    // 새로운 사용자 데이터 입력
                    pstmt.setString(1, "John Doe");
                    pstmt.setString(2, "john@example.com");
                    int affectedRows = pstmt.executeUpdate();

                    // 입력 결과에 따른 결과 메시지 출력
                    if (affectedRows > 0) {
                        System.out.println("데이터 입력 성공!");
                    } else {
                        System.out.println("데이터 입력 실패!");
                    }
                }
  • PreparedStatement를 사용하여 INSERT 쿼리를 실행하고 데이터를 데이터베이스에 입력합니다.
  • INSERT 쿼리 실행 결과로 영향을 받은 레코드의 수를 받아옵니다. (executeUpdate() 메서드 사용)
  • 영향을 받은 레코드의 수가 1 이상인 경우, 데이터 입력이 성공적으로 이루어진 것으로 간주하여 성공 메시지를 출력합니다.
  • 영향을 받은 레코드의 수가 0인 경우, 데이터 입력이 실패한 것으로 간주하여 실패 메시지를 출력합니다.

JDBC 프로그래밍에서 발생할 수 있는 예외 (Exception):

  • Checked Exception: SQLException - 데이터베이스와 관련된 문제가 발생한 경우에 발생합니다. JDBC 코드 작성 시 예외 처리가 필요합니다.

  • Unchecked Exception: 일반적인 Java Exception들
    (예를 들어, NullPointerException, ArrayIndexOutOfBoundsException 등)
    이러한 예외들은 예외 처리가 선택적이므로 반드시 처리하지 않아도 됩니다.

JDBC 예외를 처리하는 방법:

  • try-catch 블록을 사용하여 예외를 처리합니다.
  • Checked Exception인 SQLException을 처리할 때는 데이터베이스 연결과 쿼리 실행을 감싸는 try-catch 블록을 사용하여 예외를 처리합니다.
    예외 발생 시 로깅이나 사용자에게 메시지를 표시하는 등 적절한 조치를 취할 수 있습니다.
    Unchecked Exception은 필수적으로 처리하지 않아도 되지만, 필요한 경우 예외를 처리하고 문제를 해결하는 것이 좋습니다.
profile
42seoul, blockchain, web 3.0

0개의 댓글