Post

2024.JAN.05(FRI) JAVA DAY 25

유저아이디, 가고싶은 곳 입력해서 항공권 예약

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// 사용자는 자신의 userID와 가고 싶은 목적지를 입력하면,
// 해당 목적지로 가는 '왕복' 또는 '편도' 항공권 중 가장 출발이 빠른 항공권으로 예약을 진행합니다.
// (처음 예약은 ‘대기’ 상태로 초기화됩니다.)
// 만약 가는 목적지로 가는 항공권'이 없다고 하고 예약을 진행하지 않습니다.
// 만약 userId에 해당하는 Passenger ID가 없다면 RuntimeException를 뱉어야 합니다.
public class JDBCTest3 {
    //RDB, mySQL 접근 정보
    private static final String DB_URL = "jdbc:mysql://localhost:3306/chap_80";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "12341234";

    public static void main(String[] args) {
        //SQL 구문 정의
        //가고싶은 목직지로 가는 항공권 중 가장 빠른 것 하나 찾기
        String sqlQuery1 = "SELECT ticket_id" +
                " FROM airline_ticket " +
                " WHERE arrival_loc=?" +
                " ORDER BY departure_at"+
                "LIMIT 1"; //WHERE이 입력될 값, 이 값으로 검색할 예정
        //userID로 passengerID 가져오기
        String sqlQuery2 = "SELECT passenger_id" +
                " FROM passenger" +
                " WHERE user_id = ?"; //WHERE이 입력될 값, 이 값으로 검색할 예정
        //예약하는 SQL 구문
        String sqlInsert= "INSERT INTO reservation(passenger_id, airline_ticket_id, reservation_status, reserve_at" +
                "VALUES (?, ?, ?, ?) ";

        Scanner scanner = new Scanner(System.in);
        System.out.println("유저 아이디를 입력해주세요: ");
        Integer userId = Integer.valueOf(scanner.nextLine());
        System.out.println("가고 싶은 목적지를 입력해주세요: ");
        String destination = scanner.nextLine();

        try(Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
            PreparedStatement preparedStatement1 = connection.prepareStatement(sqlQuery1);
            PreparedStatement preparedStatement2 = connection.prepareStatement(sqlQuery2);
            PreparedStatement preparedStatement3 = connection.prepareStatement(sqlInsert);
        ) {
            //받아온 destination
            preparedStatement1.setString(1, destination);
            ResultSet resultSet =  preparedStatement1.executeQuery();

            //ticketID
            Integer ticketID = null;
            while (resultSet.next()) {
                ticketID = resultSet.getInt("ticket_id");
            }
            System.out.println("가고싶은 목적지를 가는 티켓 ID를 찾았습니다~" + ticketID );

            if (ticketID == null) {
                System.out.println("목적지로 가는 항공권이 없습니다. 예약이 불가합니다.");
                return;
            }

            //userName
            preparedStatement2.setInt(1, userId); //받아온 userID
            ResultSet resultSet2 = preparedStatement2.executeQuery();

            Integer passengerIdRow= null;
            while (resultSet2.next()) {
                passengerIdRow = resultSet2.getInt("passenger_id");
            }

            Integer passesngerId= Optional.ofNullable(passengerIdRow).orElseThrow(() -> new RuntimeException("해당 ID가 없습니다."));


            //위 코드에서 얻어낸 passengerID로 예약내용 출력하기
            preparedStatement3.setInt(1, passesngerId);
            preparedStatement3.setInt(2, ticketID);
            preparedStatement3.setString(3, "대기");
            preparedStatement3.setDate(4, Date.valueOf(LocalDate.now()));

            preparedStatement3.executeUpdate();


        } catch (SQLException e) {
            e.printStackTrace();
        }



        }
}

This post is licensed under CC BY 4.0 by the author.