카테고리 없음

2024. 7. 26. (금) 슈퍼코딩 부트캠프 Day 47 / 주특기 5주차

태영9922 2024. 7. 26. 17:31

 

1. FOREIGN KEY

  • 외래키 삭제 하려면 참조하고 있는 테이블을 먼저 삭제 해야함
  • CASCADE 옵션 : 참조 테이블과 연동해서 옵션 상황때 같이 값이 변경됨
양방향 참조(= 상호 참조) -> 사용하지 않는걸 권장

-> 생성부터 힘들고 삭제하려면 서로 참조하고 있기 때문에 ALTER를 사용해서 외래키 참조를 없애고 테이블 삭제 필요함

-> 연결 테이블을 통해 상호 참조하지 않고 외래키로 참조하도록 설정


1. 데이터베이스 모델링

2. 요구사항 파악과 유저 시나리오

3. 데이터베이스 모델링 진행하기

  • 요구사항 분석 : 요구사항 파악 -> 유저 시나리오 만들기 -> 엔티티 후보 선정
  • 개념적 설계 : 엔티티/관계 만들기 -> ERD 그리기 ->
  • 논리적 설계
사진 삭제

사진 설명을 입력하세요.

  • 물리적 설계

1. JDBC 프로그래밍이란?

  • JDBC API를 통해 DB와 연결
  • JDBC 프로그래밍이란? Java에서 SQL 구문자체를 넘겨 RDB에서 원하는 동작을 실행하는 프로그래밍

 

  • 구현 순서

 

2. 단순한 JDBC 프로그래밍

package org.example.jdbc;

import java.sql.*;

public class JdbcTest {

    private static final String DB_URL = "jdbc:mysql://localhost:3306/chapter_78";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "12341234";

    public static void main(String[] args) {
        //Connection 생성 -> Close 필요
        try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
             Statement statement = connection.createStatement()
        ) {
            String stringSql = "SELECT mem_name, (price*amount) AS total_price\n" +
                    "FROM group_singer g\n" +
                    "LEFT JOIN buy_history_1 b \n" +
                    "ON g.mem_id = b.mem_id\n" +
                    "WHERE price*amount >= 1000\n" +
                    "ORDER BY total_price DESC;";

            ResultSet resultSet = statement.executeQuery(stringSql); //SELECT

            while (resultSet.next()) {
                String name = resultSet.getString("mem_name");
                String price = resultSet.getString("total_price");
//
                System.out.printf("그룹 : %s, 총액 : %s\n", name, price);
            }
            String stringSql2 = "INSERT INTO group_singer (mem_id, mem_name, mem_number, addr, phone, height, debut_date)\n" +
                    "VALUES\n" +
                    "    ('mem1212', '르세라핌', 5, '서울', '01012341234', 172, '2022-12-06');";
            statement.executeUpdate(stringSql2); // INSERT
            System.out.println("SQL 성공");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
 

3. 복잡한 JDBC 프로그래밍

사진 삭제

사진 설명을 입력하세요.

package org.example.jdbc;

import java.sql.*;
import java.time.LocalDate;
import java.util.Optional;
import java.util.Scanner;

public class JdbcTest2 {
    private static final String DB_URL = "jdbc:mysql://localhost:3306/chapter_80";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "12341234";

    public static void main(String[] args) {
        String sqlQuery1 = "SELECT user_id, user_name, like_travel_place\n" +
                " FROM users\n" +
                " WHERE user_name =?;";
        String sqlQuery2 = "SELECT ticket_type, departure_loc, arrival_loc, departure_at, return_at, tax, total_price\n" +
                "FROM airline_ticket\n" +
                "WHERE departure_loc = '서울' AND ticket_type='왕복' AND arrival_loc =?\n" +
                "ORDER BY total_price;";

        System.out.print("유저 이름을 입력해주세요 : ");
        Scanner scanner = new Scanner(System.in);
        String userName = scanner.nextLine();

        try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
             PreparedStatement preparedStatement1 = connection.prepareStatement(sqlQuery1);
             PreparedStatement preparedStatement2 = connection.prepareStatement(sqlQuery2)
        ) {

            preparedStatement1.setString(1, userName);
            ResultSet resultSet = preparedStatement1.executeQuery();
            String place = null;
            if (resultSet.next()) {
                place = resultSet.getNString("like_travel_place");
            }
            Optional<String> likeTravlePlace = Optional.ofNullable(place);
            String likePlace = likeTravlePlace.orElseThrow(() -> new RuntimeException());
            System.out.println("선호하는 곳은 : " + likePlace);

            preparedStatement2.setString(1, likePlace);
            ResultSet resultSet2 = preparedStatement2.executeQuery();

            while (resultSet2.next()) {
                String ticketType = resultSet2.getNString("ticket_type");
                String departureLoc = resultSet2.getString("departure_loc");
                LocalDate departureAt = resultSet2.getDate("departure_at").toLocalDate();
                String arrivalLoc = resultSet2.getNString("arrival_loc");
                LocalDate returnAt = resultSet2.getDate("return_at").toLocalDate();
                System.out.println("type : " + ticketType + ", 출발 : " + departureLoc + ", 도착 : " + arrivalLoc +
                        ", 출국시간 : " + departureAt + ", 출국장소 : " + returnAt);
            }

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

 

 

 

#슈퍼코딩, #1:1관리형부트캠프, #백엔드, #backend, #백엔드공부, #개발공부, #백엔드개발자 #취준일기, #취준기록, #취뽀, #빡공, #HTML/CSS, #javascript, #react , #java, #spring