PGを目指す修行マン

PG修行中・転職活動中の備忘録

5月の終わり、Java学習進捗

暑くなってまいりました!

夏の到来とともに虫という虫が部屋に侵入してきます!助けて!!

 

前回の更新からだいぶん間が空いてしまいました。

カリキュラムのスケジュールが詰まってきてギリギリ解消していました…なんとかかすかな余裕を残して今週を終えたので今週末は久しぶりにお休みです。1日12時間勉強は楽しいし構わないのですが(どちらにせよ空き時間全部勉強してるし)エラーと戦って何もできず無力感にさいなまれながら時間が経つのは何よりも恐ろしい……

前職でデスクが近くだったSEさんも1日かけてほんの1行のミスを見付けて直したときはすごい喜びようでした。昔サイト作ってたときに思う通りにならなくて徹夜で仕上げたときあるからわかる……なつかしい…。

全然解消できなかったエラーが実はちょっとしたミスで、とかたいへん怖いですね。

論理エラーにも悩まされているので、今のうちに失敗しまくって経験値を貯めていこうと思います。サクサクいくよりたくさんの失敗のほうが後で役に立ちますし。(余談ですが、春原ロビンソン先生が原作の「姫様“拷問”の時間です」の12話を失敗で落ち込んでいる人に読んでもらいたいです)

shonenjumpplus.com

さて進捗の報告です。

 

スッキリわかるJava入門は1周しまして、2周目はゆっくりいこうと思います。なぜか?スッキリわかるサーブレットJSPJava Silver問題集(黒本)を購入しました!ので早く読みたいから!です。

本が好きなのでとにかく次々読んでいきたいのですね。復習大事ですが…

そういったわけで、カリキュラム途中にサブJSP本さんにはお世話になったり、黒本は2、3日で1章ずつ進めることにしています。余裕があればスピードアップしたいですが…

カリキュラムはDB操作までおおよそ終えまして、ついにやや実践的?な内容に入りました。絶対エラーがたくさん出ると思うので、レベリングに徹したいと思います!来週からの自分ファイト!

 

最後に本日論理エラーを修正して飛び跳ねたので備忘録です。

サーブレットからDBへSELECT命令する内容でしたが、HTMLのformから名前・年齢・生年月日を取得して当てはまったもので検索するのですが、生年月日だけを入れたときに合ってようが合ってなかろうが全件検索されるという…問題なくtryブロックが実行されているので論理エラーです。

SLECT文の条件は、

WHERE name = ? OR age =? OR birthday = ?

です。PreparedStatementを使っているので?には取得した値が入ります。

問題は前述のとおり。悩み続けても仕方ないのでメンターさんに相談です。

このときORDERも入れててSQL構文エラーも出てたのですがそれは置いておいて…

経緯の詳細は省くとして、いちどnameとageを検索条件から抜くと正しく実行されました。ということは、nameかageのどちらかで問題が起きています。

 

そして結論を言うと、nameの値をgetParameterした際に空文字が代入されていたことが問題でした。空文字でString型の値を検索するとなんでも合ってる!と思われるようです。

spaceでもなく空文字有効なの?という不思議は置いておいて(こちらのQAでやや不思議が解消です-

空文字の意義 -どうして、sqlserverには、空文字が存在するのでしょう- SQL Server | 教えて!goo

)、この空文字をとりあえず名前に使わなさそうな記号を代入することで撲滅しました。

if(StringUtils.isEmptyOrWhitespaceOnly(inputName)) {inputName = "×";}

もっとよい方法があれば、ぜひ教えてください。

 

あと今後の自分に向けて忠告です。現在の自分はとりあえずザーッとコードを書いて、あとから行から行へワープして修正しているせいか、自分が書いたコードでもしばらくしてからパッと見ると何をしているかわかりません。自分で書いたコードくらい一瞬で理解すべきだと思います。先にプロセスを考えて処理を整理して書きましょう。いま忠告しましたよ!