アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
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>

A 回答 (2件)

JAVA上の制限より、SQLパーサの制限が先ですね。


DBによりますが、oracleなら32767バイトまでです。
ただ、そんなSQL文をJSPにべたべた書くか? というのは疑問ではあります。
そこまでこったことをするのなら、JSPだけじゃなく、外部ライブラリを呼ぶ形で結果をもらった方がいいかもしれませんね。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2007/07/26 21:25

> 説明が分かりにくいかもしれませんが


うん。。。全然わからない。
<% %>で囲まれた部分はサーバ側で動作するもので、通常タグはクライアント側にフォワードされるものだから、渡すという言葉の意味が理解できないです。
<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が書かれていないので方言があるかもしれませんが。

この回答への補足

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

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

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!