こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JSPで複数テーブルのSQL実行後に値を送る方法を教えて下さい!

いつもお世話になっております。
JSPにてUNION ALLを使用してSQLを実行します。
(ソースは必要部分のみ記載致します)
SQL実行後にテーブルのカラムにある「番号」と「テーブル名」を
<FORM method="post" action="Next_View.jsp?table=????">
<input type="hidden" name="num" value="<%= rs.getString("番号")%>">
の部分で送りたいのですがどの様に記述すればいいのか調べてみましたが
分かりませんでした。

説明が分かりにくいかもしれませんがどうかご教示下さいませ。


ちなみに番号はT_2005・T_2006・T_2007 共に1から順にオートナンバーで振られています。

String str = request.getParameter("Num");
rs = stmt.executeQuery
("SELECT * FROM T_2005 where ID='"+ str +"' union all SELECT * FROM T_2006 where ID='"+ str +"' union all SELECT * FROM T_2007 where ID='"+ str +"'");

while (rs.next()){

String year = rs.getString("年齢");
String number = rs.getString("電話番号");
String add = rs.getString("住所");

%>
<TR>
<FORM method="post" action="Next_View.jsp?table=????">
<input type="hidden" name="num" value="<%= rs.getString("番号")%>">
<TD><%= year %></TD>
<TD><%= number %></TD>
<TD><%= add %></TD>
<%-- 詳細ボタンを表示 --%>
<input type="submit" value="詳細">
</form>
</TD>
</TR>

投稿日時 - 2007-07-25 16:30:58

QNo.3198605

困ってます

質問者が選んだベストアンサー

JAVA上の制限より、SQLパーサの制限が先ですね。
DBによりますが、oracleなら32767バイトまでです。
ただ、そんなSQL文をJSPにべたべた書くか? というのは疑問ではあります。
そこまでこったことをするのなら、JSPだけじゃなく、外部ライブラリを呼ぶ形で結果をもらった方がいいかもしれませんね。

投稿日時 - 2007-07-26 12:12:25

お礼

ありがとうございます!
>ただ、そんなSQL文をJSPにべたべた書くか?
おっしゃるとおりかと思います。。。

タグライブラリとか探してみます☆
本当に参考になりました!
ありがとうございました♪

投稿日時 - 2007-07-26 21:25:58

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> 説明が分かりにくいかもしれませんが
うん。。。全然わからない。
<% %>で囲まれた部分はサーバ側で動作するもので、通常タグはクライアント側にフォワードされるものだから、渡すという言葉の意味が理解できないです。
<form>タグはたくさんできてしまっていいということですか?
while(rs.next())の結果は複数あるので、formがたくさんできちゃいますが、いいのでしょうか。

それなら、SELECTで"*"を使わずに、実際の必要なカラム名を指定するように、
("SELECT 'T_2005' as tname, seq, year, number, add FROM T_2005 where ID='"+ str +"' union all SELECT 'T_2006' as tname, seq, year, number, add FROM T_2006 where ID='"+ str +"' union all SELECT 'T_2007' as tname, seq, year, number, add FROM T_2007 where ID='"+ str +"'");

とでもして、<%=rs.getString("tname")%> でテーブル名が、帰ってくるからそれをつかえばよいのでは?
※DBが書かれていないので方言があるかもしれませんが。

投稿日時 - 2007-07-25 17:39:30

補足

やっぱり分かりませんでしたか・・・
すみません。。。

クライアント側にフォワードされると言う言い方をすればよかったですね。
知識が未熟で言葉が思いつきませんでした。

formはたくさんできちゃってもいいです!
>("SELECT 'T_2005' as tname, seq, year, number, add FROM T_2005 where ID='"+ str +"' union all SELECT 'T_2006' as tname, seq, year, number, add FROM T_2006 where ID='"+ str +"' union all SELECT 'T_2007' as tname, seq, year, number, add FROM T_2007 where ID='"+ str +"'");

この様なやり方があるんですね?なるほど!
テーブルは例で書いたのですが本当はDB1つにつき50カラム程あります。

長いSQLでも特に問題のないものなのでしょうか??
たびたび申し訳ございません。

投稿日時 - 2007-07-25 23:05:27

あなたにオススメの質問