「資格試験/情報処理技術者試験/情報セキュリティスペシャリスト/過去問2013年春午後2/問1設問3-3」の編集履歴(バックアップ)一覧に戻る
設問3 予約管理機能の不具合について(1)~(4)に答えよ。
(3) 図9を完成させるために、【s】~【u】に入れる適切な字句又は数字を答えよ。
|
a郡 |
b郡 |
【s】 |
Status=? |
LastUpdate=? |
【t】 |
psUp.setInt(10, revStatus); |
psUp.setLong(10, lastDateTime); |
【u】 |
1 |
1 |
解説
排他制御に関する問題です。
本文抜粋
[予約管理機能における不具合の修正]
Sグループのリーダとしてソースコードレビューに参加していたT主任は、この不具合を修正するために、executeUpdateメソッドでUPDATE文を実行した時、更新した行数が戻り値になることに着目した。そして、図5の25行目のパラメタ付きSQLのWHERE句を修正した上で、図5の60行目のexecuteUpdateメソッドの実行時に異常の発生を検知する仕組みを提案した。この提案に基づき修正されたプログラムは図9のとおりである。
図9 修正されたサーブレット"WakuClick"
1~23:(省略)[図5の1~23と同じ]
24: psSel = conn.prepareStatement("SELECT * FROM rsvList WHERE rsvDate=? AND rsvTime=? AND Biyoshi=?");
25: psUp = conn.prepareStatement("UPDATE revList SET Status=?, CustID?, Message=?, Menu=?, LastUpdate=? WHERE rsvDate=? AND rsvTime=? AND Biyoshi=?AND CustID=? AND 【s】");
26:
27~46:(省略)[図5の27~46と同じ]
47: int rsvStatus = rs.getInt("Status");
48: String rsvCustID = rs.getInt("CustID");
49: if (rsvStatus == RSV_KARI) {
50: // 予約状況が空きであることを確認し、仮予約処理を行う
51: (省略)[予約リストを適切に更新し、仮予約処理を行う]
52: } else if (rsvStatus == RSV_KARI && ((nowDateTime -
lastDateTime)> TIMEOUT_KARI)){
53: // 既に仮予約状態であっても、TIMEOUT_KARI経過後なら、自分の仮予約に変更する
54: psUp.setInt(1, RSV_KARI); psUp.setString(2, loginUserID); psUp.setString(3, "");
55: psUp.setString(4, ""); psUp.setLong(5, nowDateTime);
56: psUp.setString(6, rsvDate);
57: psUp.setString(7, rsvTime); psUp.setString(8, rsvBiyoshi);
58: psUp.setString(9, rsvCustID); 【t】;
59: if (psUp.executeUpdate() == 【u】) {
60: (省略)[図6の処理を引き継ぐために、選択した予約枠の情報をサーブレットのセッション情報に保存する]
61: (省略)[画面3のHTML出力を行う]
62: } else {
63: (省略)[予約失敗の画面のHTML出力を行う]
64: }
65: } else {
66~71:(省略)[図5の64~69と同じ]
注記1 SQL例外を含め、例外処理については省略している。省略した部分で必要とするクラスに関わるimportの記述も省略している。
注記2 下線は、修正した部分を表す。
注記3(省略)[・・・]は、その位置に[]内に示す処理が記述されているが、省略していることを示す。
図9 修正されたサーブレット"WakuClick"終わり