前回(大学生がサーブレット&JSPでキャラクター管理システムを作ってみる話1
)の最後に、次回は更新・削除作業の画面遷移を考えるとか言いましたが、「次の画面遷移考えるより、考え終わった登録の画面遷移はどれだけ有用なのか確かめてみてもいいかもな」と思ったので、登録機能の実装に取り組み始めました。
登録の画面遷移で考え不足のところがあったら、その次に考える予定の画面遷移でも考えが足りなくて、プログラミングの時に困っちゃいそうですしね。
そしていざ登録機能の開発を始めてみたらなんと問題が発覚。
ゲーム:(ドロップボタンで選択)
という文がありますよね。
ここはGAMESテーブルからゲーム情報を取得し、ドロップダウンで表示・選択して情報を取得するという流れを考えていました。
ですが皆さま、気づきましたでしょうか。
GANESテーブルからデータを取得する流れがないことに。
このテーブルを操作するDAOも記載していません。
流れを考えてはいましたが、画面遷移図に書いていなかったのです。
愚かなことに、自分は「まぁ、これくらい図が無くてもできるでしょ!」と甘く見てプログラムを進めようとしましたが、頭がごちゃついてしまい、結局、
簡単に流れを書きました。
これくらい流れが無くても作れるでしょ、と思ったかもしれません。
でも、サーブレットもJSPもまだ使いこなせていないので「あれ、これってどう書くんだっけ...」「あれ、DAOがDBとやり取りするんだよね...?」というふうになり、頭がごちゃごちゃになってしまうのです...。はやく頭の中で流れとプログラムの書き方を紐づけられるようになりたいです。
そして、思っていたよりも時間がかかってしまいましたが、ゲームをドロップダウンで選択できるようになりました。
やったね。
ここができたらもうできる。
ということで、characterのDAOやBO、結果表示のjspもろもろを作り、登録画面のフォームに入力し、送信しました。登録完了の画面に遷移できたのを確認したので、h2コンソールでちゃんとデータが格納できているか確認した結果、
しっかり登録できているのがわかりました。よかった。
(UPDATE-DATEの日付が違うのは、この間に風邪でダウンしてたからです...。ちゃんと実行した日の日付が格納されています)
閑話
ところで、Date型ってjava側とsql側で違うんですね...。
最初、DAOでSQL文のプレースホルダに更新日の値を代入しようとして、
Date date = new Date();
pStmt.setDate(6, date);
というようなプログラムを書いて怒られたんです。
そこでネットで調べたりGPTに聞いたりしたら、このDate型のdateをSQLのDate型にしなきゃいけなかったらしく、
java.util.Date utilDate = character.getUpdate_date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
pStmt.setDate(6, date);
このように修正したらできました。
名前がどちらも「Date型」だからといって、気軽に手渡せるとは限らないことを学びました。
次は一覧表示の画面遷移と実装をしようかな。