/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 019 例外と例外処理(トランザクションとロールバック) 033 解答例 | Javaドリル

019 例外と例外処理(トランザクションとロールバック) 033 解答例

019-033 019 例外と例外処理
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");
    }
}
  1. makeReservation メソッド内でトランザクションを開始し、予約の重複チェックを行います。
  2. isReservationAvailable メソッドで指定された施設と日時に既に予約があるかどうかを確認します。
  3. 予約が重複している場合、トランザクションをロールバックし、エラーメッセージを表示して処理を終了します。
  4. 予約が重複していない場合、insertReservation メソッドで新しい予約をデータベースに登録します。
  5. トランザクションのコミットを行い、予約が完了した旨のメッセージを表示します。

「019 例外と例外処理」問題集リスト

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

コメント

タイトルとURLをコピーしました