최원종의 개발 블로그

JDBC 데이터 기본 조작 (CRUD) - 3 본문

Java/JAVA 유용한 클래스

JDBC 데이터 기본 조작 (CRUD) - 3

chl6698 2026. 4. 14. 13:07

배운 개념 확인

Connection       → DB 와의 연결 통로
PreparedStatement → SQL 을 DB 에 전달 (파라미터 바인딩, SQL 인젝션 방지)
ResultSet        → SELECT 결과를 담는 그릇

CRUD

Create  → INSERT  : 새 데이터 추가
Read    → SELECT  : 데이터 조회
Update  → UPDATE  : 기존 데이터 수정
Delete  → DELETE  : 데이터 삭제

모든 데이터 관련 작업은 이 네 가지 중 하나입니다.
쇼핑몰에서:
  회원가입       → INSERT
  상품 목록 조회 → SELECT
  회원 정보 수정 → UPDATE
  회원 탈퇴      → DELETE

실습 준비

-- 테이블이 없다면 아래를 실행하세요
create database shop2;
USE shop2;

CREATE TABLE IF NOT EXISTS product2 (
    id          INT           PRIMARY KEY AUTO_INCREMENT,
    name        VARCHAR(100)  NOT NULL,
    price       INT           NOT NULL,
    stock       INT           DEFAULT 0,
    description VARCHAR(200)
);

-- 기존 데이터 확인
SELECT * FROM product2;

 


INSERT 연습

package ch03;

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

public class ProductInsert {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/shop2?serverTimezone=Asia/Seoul";
        String user = System.getenv("DB_USER");
        String pwd = System.getenv("DB_PASSWORD");

        // insert 쿼리 구문을 미리 Strin으로 만들어 두자
        // 텍스트블록 문법 JDK 13이후 사용 가능
        String sql = """ 
                INSERT INTO product2(name, price, stock, description)
                values( ? , ? , ? , ? )
                """;

        try (Connection conn = DriverManager.getConnection(url, user, pwd);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, "애플 에어팟 프로");
            pstmt.setInt(2, 329000);
            pstmt.setInt(3, 10);
            pstmt.setString(4, "최신 무선 이어폰");

            int rows = pstmt.executeUpdate();
            System.out.println(rows + " 개의 상품이 추가 되었습니다.");

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

SELECT 연습 1

package ch03;

import java.sql.*;

public class ProductSelectAll {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/shop2?serverTimezone=Asia/Seoul";
        String user = System.getenv("DB_USER");
        String pwd = System.getenv("DB_PASSWORD");

        // insert 쿼리 구문을 미리 String으로 만들어 두자
        // 텍스트 블록 문법 JDK 13버전 이후 사용 가능
        String sql = """
                SELECT * FROM product2
                
                """;

        try (Connection conn = DriverManager.getConnection(url, user, pwd);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            ResultSet rs = pstmt.executeQuery();

            System.out.println(" == 전체 상품 목록 조회 ==");
            while (rs.next()) {
                String outPut = """
                        ID: %3d | %-20s | %,7d원 | 재고 : %3d개
                        """.formatted(
                        rs.getInt("id"),
                        rs.getString("name"),
                        rs.getInt("price"),
                        rs.getInt("stock")
                );
                // 참고로 텍스트 블록 문법은 자동으로 \n이 들어가있다.
                System.out.print(outPut);
            }


        } catch (SQLException e) {
            System.out.println("오류 : " + e.getMessage());
        }

    }
}

SELECT 연습 2

package ch03;

import java.sql.*;

public class ProductSelectByPrice {

    public static void main(String[] args) {

        //상품이 만원에서 10만원 사이의 상품을 출력하시오
        //shop DB 사용 product 테이블 사용
        // 가격 오름차순 정렬

        String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul";
        String user = System.getenv("DB_USER");
        String pwd = System.getenv("DB_PASSWORD");

        // insert 쿼리 구문을 미리 String으로 만들어 두자
        // 텍스트 블록 문법 JDK 13버전 이후 사용 가능
        String sql = """
                select * from product where price between 10000 and 100000 order by price asc;
               
                """;

        try (Connection conn = DriverManager.getConnection(url, user, pwd);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            ResultSet rs = pstmt.executeQuery();

            int count = 0;
            System.out.println(" == 전체 상품 목록 조회 ==");
            while (rs.next()) {
                count++;
                String outPut = """
                        ID: %3d | %-20s | %,7d원 | 재고 : %3d개
                        """.formatted(
                        rs.getInt("id"),
                        rs.getString("name"),
                        rs.getInt("price"),
                        rs.getInt("stock")
                );
                // 참고로 텍스트 블록 문법은 자동으로 \n이 들어가있다.
                System.out.print(outPut);
            }
            System.out.println(count + "번 반복문 돌았습니다");

        } catch (SQLException e) {
            System.out.println("오류 : " + e.getMessage());
        }

    }
}

Update 연습

package ch03;

import java.sql.*;

public class ProductUpdate {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/shop2?serverTimezone=Asia/Seoul";
        String user = System.getenv("DB_USER");
        String pwd = System.getenv("DB_PASSWORD");

        // UPDEATE - name, 가격을 수정하는 쿼리를 진행할 예정
        // 텍스트 블록 문법 JDK 13버전 이후 사용 가능
        String sql = """
                update product2
                set price = ?
                where name = ?
                
                """;
        int newPrice = 500000;
        String targetName = "애플 에어팟 프로";

        try (Connection conn = DriverManager.getConnection(url, user, pwd);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setInt(1, newPrice);
            pstmt.setString(2, targetName);

            System.out.println(" == 상품 가격 수정 : 타겟상품 : " + targetName);
            int rows = pstmt.executeUpdate();
            if (rows > 0) {
                System.out.println(rows + "개의 상품 가격이 수정되었습니다");
            } else {
                System.out.println("수정할 상품을 찾지 못했습니다");
            }


        } catch (SQLException e) {
            System.out.println("오류 : " + e.getMessage());
        }

    }
}

DELETE 연습

package ch03;

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

public class ProductDelete {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/shop2?serverTimezone=Asia/Seoul";
        String user = System.getenv("DB_USER");
        String pwd = System.getenv("DB_PASSWORD");

        // UPDEATE - name, 가격을 수정하는 쿼리를 진행할 예정
        // 텍스트 블록 문법 JDK 13버전 이후 사용 가능
        String sql = """
                delete from product2 where id = ?
                
                """;
        int targetId = 2;


        try (Connection conn = DriverManager.getConnection(url, user, pwd);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setInt(1, targetId);
            System.out.println("== 상품 가격 수정 : 타겟상품ID : " + targetId);
            int rows = pstmt.executeUpdate();
            if (rows > 0) {
                System.out.println(rows + "개의 상품이 삭제되었습니다");
            } else {
                System.out.println("삭제할 상품을 찾지 못했습니다");
            }


        } catch (SQLException e) {
            System.out.println("오류 : " + e.getMessage());
        }

    }
}