今日は入力した項目で検索できるようにしようと思ったのですが、
つまりそれってand検索じゃねぇかと思い、いざ実装へ。

だけどどうやって作るんだい?っていう。ここで先輩のヒント。
入力フォームの文字数を調べて、一文字以上入ってたらその項目で
検索ってやればいいんだよ…という。

なるほど。じゃまず入力値の文字数を取り出して、

if(文字数!=0)
{検索メソッドに飛んでちょいだいな }

else
{ 全件検索してちょうだいな}
(すごくはしょった)

あれ、これじゃ一項目でしかできないし。いや、増やせる気はするけど、検索メソッドどう書くの?
入力された項目によって、検索する列変わってくるよね?

どうやって判断するの?if文書きまくるの?え、だって項目選択のバリエーション何個あるよ?

……………………。

心折れる音がバキっと聞こえました。
いや、てかもっと利口な書き方あるはず!

先輩のヒントをもう少し聞いてみると、まず最初にテーブルを全件検索するセレクト文をつくって、変数に格納します。で、その後入力フォームの文字列を見て、一文字でも入っていれば最初の変数にwhere句を足していき、最後に出来上がったSQLを実行する、という理論。

へぇぇ、斬新。

まあ、理屈わかるのと実際にコード書けるかは話別だけどね。

ぶっちゃけ今日は何も進まなかったわけですが、昨日までくっついてた入力フォームと検索結果表示が分離出来たから、まあよしとする(どこが
文字化け直りました。

入力値を変数に格納したあと、変数を強制的にエンコード。

変数 = new String(変数.…)

あ、やっぱり忘れました(殴

とにかくJSPとサーブレットのエンコーディングもいじったのに直らないよ~、
という型の参考に(なるのか?)。

さて、こうして題名のキーワード検索は出来るようになりました。
コードをコピペしてちょっと書き換えれば、著者や出版社でも検索出来ます。

だ、だけど題名と作者で検索したいときは?
つまり項目毎のand検索ってどう作るんだっていう。

同僚にPreparedStatementを使えばいいじゃん、と言われました。
でも今使ってるコードはサンプルちょぼちょぼいじっただけなので、どこをどういじればいいのかちんぷんかんぷん。
ちなみにPreparedStatement一回も使ってない。

なんで動くんだ?このコード(笑)。

まず明日はコードを丁寧に追うところからやるか…(遅)。

金曜日、会社の引き出しの中に携帯を放置してしまい、土日は音信不通になっていた儒艮です。


さて、本日も再び検索システム作りの格闘。


先週までは自分の頭の中を整理したいこともあって、最初から自分でコードを書いていました。
しかし、入力フォームとサーブレットは割とすぐにできたものの、サーブレットの処理結果を
JSPに表示させるところでどうしてもつっかかってしまい、断念。
結局、Web上のサンプルコードをパク…


うおっほん!


引用して作成することに。
引用させていただいたのは、先日紹介いたしました、CodeZine様。
お世話になります。


ドライバのURLとかをちょこっと書き直すだけで、すぐに作成できました。
IDでなら本の検索もできるようになりました。


しかし、また立ちはばかる言語の壁。


IDじゃなく、タイトルから検索できるように改造しました。
これでいけるはず!とテストしたら…


該当なし。なぜ!?


Eclipseのコンソールにはエラーは出ていないものの、こんなSQL文が。


SELECT * FROM book_mst WHERE title = '??????F??????W??(←入力キーワードのなれの果て)'


そんな芸術的なキーワード入力してねえよ!
どうやら入力した日本語キーワードがサーブレットに渡される間に文字化けしたらしく、
化けた文字でDB検索されているようす。戸田奈津子もびっくりの翻訳です。


試しにサーブレットとJSPのエンコーディング設定をすべてWindows-31JからShift_JISにしてもだめ。
DBのエンコーディングもいじったけどだめ。


調べたところによると、どうもgetParameterメソッドのエンコーディングをいじらなきゃならないらしい
です。でもよくわからなかった…

今日はここで心折れたので、続きは明日やることに。


ペタしてね