Topcit

Java PreparedStatement

Life Log 2024. 10. 28. 00:19
728x90
반응형

아래는 PreparedStatement를 이용해 데이터베이스에 데이터를 삽입하고 조회하는 예제 코드입니다. 이 예제에서는 insertUser 메서드를 통해 데이터를 삽입한 뒤, getUserByEmail 메서드를 통해 특정 이메일을 기준으로 데이터를 조회합니다.

1. 테이블 구조

이 예제는 앞서 생성한 users 테이블을 사용합니다.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL
);

2. Java PreparedStatement 예제 코드 (INSERT 및 SELECT)

insertUser 메서드는 사용자를 테이블에 삽입하고, getUserByEmail 메서드는 주어진 이메일로 사용자를 조회하여 결과를 출력합니다.

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

public class PreparedStatementExample {

    // 데이터베이스 연결 정보
    private static final String URL = "jdbc:mysql://localhost:3306/your_database";
    private static final String USER = "your_username";
    private static final String PASSWORD = "your_password";

    public static void main(String[] args) {
        String name = "John Doe";
        String email = "john.doe@example.com";

        insertUser(name, email);
        getUserByEmail(email);
    }

    // 사용자 정보를 삽입하는 메서드
    public static void insertUser(String name, String email) {
        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";

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

            // ?에 값 바인딩
            pstmt.setString(1, name);
            pstmt.setString(2, email);

            // 실행 및 결과 확인
            int rowsInserted = pstmt.executeUpdate();
            if (rowsInserted > 0) {
                System.out.println("새로운 사용자가 성공적으로 추가되었습니다!");
            }

        } catch (SQLException e) {
            System.out.println("데이터 삽입 오류: " + e.getMessage());
        }
    }

    // 이메일로 사용자를 조회하는 메서드
    public static void getUserByEmail(String email) {
        String sql = "SELECT id, name, email FROM users WHERE email = ?";

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

            // ?에 값 바인딩
            pstmt.setString(1, email);

            // 쿼리 실행 및 결과 가져오기
            ResultSet rs = pstmt.executeQuery();

            // 결과 출력
            if (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String emailRetrieved = rs.getString("email");

                System.out.println("조회된 사용자:");
                System.out.println("ID: " + id);
                System.out.println("이름: " + name);
                System.out.println("이메일: " + emailRetrieved);
            } else {
                System.out.println("해당 이메일로 사용자를 찾을 수 없습니다.");
            }

        } catch (SQLException e) {
            System.out.println("데이터 조회 오류: " + e.getMessage());
        }
    }
}

3. 코드 설명

  • insertUser 메서드:
    • 사용자의 nameemailusers 테이블에 삽입합니다.
    • PreparedStatementsetString 메서드를 사용해 ? 자리마다 값을 바인딩하여 안전하게 SQL 쿼리를 실행합니다.
  • getUserByEmail 메서드:
    • 주어진 이메일을 기준으로 users 테이블에서 데이터를 조회합니다.
    • pstmt.executeQuery()를 사용해 ResultSet 객체에 결과를 저장하고, rs.next()를 호출해 결과가 있는지 확인한 후 데이터를 추출하여 출력합니다.
  • try-with-resources:
    • Connection, PreparedStatement, ResultSet 객체는 try-with-resources 블록을 사용해 자동으로 닫히도록 설정했습니다.

4. 실행 결과

예제를 실행하면 사용자를 삽입하고, 해당 이메일로 사용자를 조회하는 결과가 출력됩니다.

새로운 사용자가 성공적으로 추가되었습니다!
조회된 사용자:
ID: 1
이름: John Doe
이메일: john.doe@example.com

주의 사항

  • 실제 데이터베이스 연결 정보(URL, USER, PASSWORD)는 본인의 환경에 맞게 수정해야 합니다.
  • 이 예제는 SQL 인젝션을 방지하는 PreparedStatement의 장점을 잘 보여줍니다. 입력값을 쿼리에 직접 추가하지 않고 setString 메서드를 통해 값이 바인딩되므로 보안적으로 안전한 코드를 작성할 수 있습니다.

이 코드는 PreparedStatement를 사용해 SQL 삽입 및 조회 작업을 안전하고 효율적으로 수행하는 방법을 학습하는 데 도움이 될 것입니다.

728x90
반응형

'Topcit' 카테고리의 다른 글

이진 트리 순회 방식  (1) 2024.11.10
클래스 다이어그램  (1) 2024.11.09
Java 객체지향 프로그래밍 특징  (0) 2024.10.28
SQL DCL 요약  (0) 2024.10.28
SQL DML 요약  (1) 2024.10.27