import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ReservationProgram {
// ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹æŽ¥ç¶šæƒ…å ±
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/reservation_db";
private static final String USER = "username";
private static final String PASSWORD = "password";
// 予約を行ã†ãƒ¡ã‚½ãƒƒãƒ‰
public void makeReservation(String facility, String dateTime) {
try (Connection connection = DriverManager.getConnection(JDBC_URL, USER, PASSWORD)) {
// トランザクションã®é–‹å§‹
connection.setAutoCommit(false);
// 予約ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯
if (!isReservationAvailable(connection, facility, dateTime)) {
// 予約ãŒé‡è¤‡ã—ã¦ã„ã‚‹å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯
connection.rollback();
System.out.println("予約ãŒé‡è¤‡ã—ã¦ã„ã¾ã™ã€‚");
return;
}
// 予約をデータベースã«ç™»éŒ²
insertReservation(connection, facility, dateTime);
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆ
connection.commit();
System.out.println("予約ãŒå®Œäº†ã—ã¾ã—ãŸã€‚");
} catch (SQLException e) {
e.printStackTrace();
}
}
// 予約ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯ã‚’行ã†ãƒ¡ã‚½ãƒƒãƒ‰
private boolean isReservationAvailable(Connection connection, String facility, String dateTime)
throws SQLException {
String sql = "SELECT COUNT(*) FROM reservations WHERE facility = ? AND date_time = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, facility);
preparedStatement.setString(2, dateTime);
// 予約ãŒã‚ã‚‹å ´åˆã¯ false ã‚’è¿”ã™
return preparedStatement.executeQuery().getInt(1) == 0;
}
}
// 予約をデータベースã«ç™»éŒ²ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
private void insertReservation(Connection connection, String facility, String dateTime)
throws SQLException {
String sql = "INSERT INTO reservations (facility, date_time) VALUES (?, ?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, facility);
preparedStatement.setString(2, dateTime);
preparedStatement.executeUpdate();
}
}
public static void main(String[] args) {
ReservationProgram reservationProgram = new ReservationProgram();
reservationProgram.makeReservation("Conference Room A", "2023-01-01 14:00");
}
}
makeReservationメソッド内ã§ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã—ã€äºˆç´„ã®é‡è¤‡ãƒã‚§ãƒƒã‚¯ã‚’行ã„ã¾ã™ã€‚isReservationAvailableãƒ¡ã‚½ãƒƒãƒ‰ã§æŒ‡å®šã•ã‚ŒãŸæ–½è¨ã¨æ—¥æ™‚ã«æ—¢ã«äºˆç´„ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚- 予約ãŒé‡è¤‡ã—ã¦ã„ã‚‹å ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦å‡¦ç†ã‚’終了ã—ã¾ã™ã€‚
- 予約ãŒé‡è¤‡ã—ã¦ã„ãªã„å ´åˆã€
insertReservationãƒ¡ã‚½ãƒƒãƒ‰ã§æ–°ã—ã„予約をデータベースã«ç™»éŒ²ã—ã¾ã™ã€‚ - トランザクションã®ã‚³ãƒŸãƒƒãƒˆã‚’行ã„ã€äºˆç´„ãŒå®Œäº†ã—ãŸæ—¨ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント