- PR -

JSP・サーブレットとMySQLの連携を勉強中です

投稿者投稿内容
Hirsch
会議室デビュー日: 2006/11/03
投稿数: 19
投稿日時: 2006-11-16 22:34
HTMLのフォームで取得したデータとMySQLに登録してあるカラムのデータと比較し、
該当するデータがある場合に画面に表示させるプログラムを作成中ですが、取り出したい要素が1つしかないのに、4回も同じ文字列を表示してしまいます。
ResultSetのnext()で、while文をまわしています。
何かいい解決策はありませんか?
next()以外のメソッドも教えてください。
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-11-16 23:31
引用:
取り出したい要素が1つしかないのに、4回も同じ文字列を表示してしまいます。


プログラムというよりSQLが間違っている気が・・・。

引用:
ResultSetのnext()で、while文をまわしています。
何かいい解決策はありませんか?
next()以外のメソッドも教えてください。


上記の通りプログラム側で対応する問題では無い気がします。
SQLを見直しましょう。
どうしてもプログラムで対応したいのであればhttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/ResultSet.html
に全てのAPIが載ってます。

#日本語がヘンだったので修正

[ メッセージ編集済み 編集者: SUK2 編集日時 2006-11-16 23:31 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-17 09:20
プログラムからSQLを実行する前に、MySQLのコンソールで
同じSQLを実行してみましょう。

SQL単体が確実に自分の意図した動きをすることを確認してから
それをプログラムに組み込みましょう。

このようにパーツごとに動作確認して進めていかないと、
いったい何が問題なのかがわからなくなります。
不良品が混ざったパーツを組み立てればそりゃぁ不良品に組みあがる。

デバッグというのは原因がつかめた時点で半分は作業が終わるようなものです。
組みあがったシステムのどのパーツが不良品なのか探すのが大変なんですよ。
組む前にパーツごとにテストすれば最初から半分の労力が楽できるわけですね。

これを急がば回れといいます。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-11-17 09:37
とにかく、自分の書いたプログラムを、自分で読めないとね。
引用:

Pferd&Hirschさんの書き込み (2006-11-16 22:34) より:

該当するデータがある場合に画面に表示させるプログラムを作成中ですが、取り出したい要素が1つしかないのに、4回も同じ文字列を表示してしまいます。


要するに、スレ主さんは
「対象となる要素は1つなのに、それを4回表示するプログラムを書いている」訳です。
これをきちんと理解することだって、勉強になりますよ。
Hirsch
会議室デビュー日: 2006/11/03
投稿数: 19
投稿日時: 2006-11-20 09:34
どうも、いろいろありがとうございます。
紹介されたサイトを見てみたり、一つずつもう一度確認していくことから、始めてみます。
Hirsch
会議室デビュー日: 2006/11/03
投稿数: 19
投稿日時: 2006-11-20 14:03
同じ文字列を複数回表示することはなくなりました。
ちなみに、SQL文は select * from mana;
manaがデータベーステーブル名です。
Hirsch
会議室デビュー日: 2006/11/03
投稿数: 19
投稿日時: 2006-11-20 15:11
while 文の中で、
if(book.matches(BookName)&&author.matches(AuthorName)){
  out.println("<p>"+"書籍名"+book+"</p>"
  +"<p>"+"著者名"+author+"</p>"
  +"<p>"+"出版社"+publisher+"</p>");
}
else if(size1 == size2 && size3==size4){
  out.println("hit");
}else{
  out.println("無し");
}

をしています。

book = rs.getString("book_name"); //データベースのカラムbook_nameの中身を取得
author = rs.getString("author_name"); //データベースのカラムauthor_nameの中身を取得
publisher = rs.getString("publisher_name"); //データベースのカラムpublisher_nameの中身を取得
int size1 = book.length(); //カラムbook_nameの長さ取得
int size2 = BookName.length(); //入力された書籍の長さを取得
int size3 = author.length(); //カラムauthor_nameの長さ取得
int size4 = AuthorName.length(); //入力された著者名の長さを取得

HTMLフォームから取得したデータと、比較させようと思っているのですが、なぜかいつも該当するデータがあるにも拘らず、最後のelse文の中に入ってしまいます。
長文で、すみませんが原因があれば、教えてください。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-20 15:24
引用:

HTMLフォームから取得したデータと、比較させようと思っているのですが、なぜかいつも該当するデータがあるにも拘らず、最後のelse文の中に入ってしまいます。
長文で、すみませんが原因があれば、教えてください。



ステップ実行して変数の値を確認すれば一発で解決しそうですが。
いわゆるprintfデバッグをするのであれば、
if文の中身をSystem.out.printlnで書き出しましょう。

ピンポイントでここがおかしいという点が見つかるまで、
とにかく細分化して調べる癖をつけましょう。
if文の条件式が思ったように動いていないようであれば、
その条件式をばらしてどこがおかしいのか特定しましょう。
そうしないといつまでたってもデバッグできるようになれませんよ。

コード:
System.out.println(book);
System.out.println(BookName);
System.out.println(book.matches(BookName));
System.out.println(author);
System.out.println(AuthorName);
System.out.println(author.matches(AuthorName));


matchesを使っている時点で問題あると思いますが、
そのあたりは自分の目で挙動を確認されたほうがよいでしょうね。

スキルアップ/キャリアアップ(JOB@IT)