ママのスキンケアのお悩みにおすすめアイテム

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJSPで複数のSQL実行について教えて下さい

JSPで複数のSQLを実行したいと思い、作ってみましたがページが全く表示されません。
SQL分が違う気がするのですがどこが悪いのか分りません。
ご教示下さいませ。ソースのせます。

<%@page contentType="text/html; charset=Windows-31J"%>
<%@page import="java.sql.*"%>
<%!
// サーブレットのinitメソッドに相当
public void jspInit() {
try {
// JDBCドライバをロード
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
%>
<HTML>
<HEAD>
<TITLE>結果</TITLE></HEAD>
<BODY>
<CENTER>
<B>結果</B>
<TABLE border="3">
<TR>
<TD>年齢</TD>
<TD>氏名</TD>
</TR>
<%
// データベースへのアクセス開始
Connection con = null;
Statement stmt = null;
ResultSet rs = null;

try {
// データベースに接続するConnectionオブジェクトの取得
con = DriverManager.getConnection("jdbc:sqlserver:ServerName;DatabaseName=Name","ID","PW");
// データベース操作を行うためのStatementオブジェクトの取得
stmt = con.createStatement();

if (request.getParameter("buttonA") != null) {
// テキストボックスの値を取得
String paramA = request.getParameter("NamA");
// SQL()を実行して、結果を得る
rs = stmt.executeQuery("SELECT * FROM TABLE_A where 年齢='"+ paramA +"'");
rs = stmt.executeQuery("SELECT * FROM TABLE_B where 年齢='"+ paramA +"'");
} if (request.getParameter("buttonB") != null) {
// テキストボックスの値を取得
String param = request.getParameter("NamB");
// getParameterの値を文字列へ変換
String paramB = new String(param.getBytes("ISO-8859-1"),"Shift_JIS");
rs = stmt.executeQuery("SELECT * FROM TABLE_A where 氏名 like '%"+ paramB +"%'");
rs = stmt.executeQuery("SELECT * FROM TABLE_B where 氏名 like '%"+ paramB +"%'");
}
// 得られた結果をレコードごとに表示
while (rs.next()){

String year = rs.getString("年齢");
String name = rs.getString("氏名");
%>
<TR>
<FORM method="post" action="Next.jsp">
<TD><%= year %></TD>
<TD><%= name %></TD>
</form>
</TD>
</TR>
<%
}

} catch (Exception e) {
e.printStackTrace();
// エラー表示プログラム
out.write(e.getMessage());
} finally {
// データベースとの接続をクローズ
try { rs.close(); } catch (Exception e) {}
try { stmt.close(); } catch (Exception e) {}
try { con.close(); } catch (Exception e) {}
}
%>
</TABLE>
</BODY>
</HTML>

JSPで複数のSQLを実行したいと思い、作ってみましたがページが全く表示されません。
SQL分が違う気がするのですがどこが悪いのか分りません。
ご教示下さいませ。ソースのせます。

<%@page contentType="text/html; charset=Windows-31J"%>
<%@page import="java.sql.*"%>
<%!
// サーブレットのinitメソッドに相当
public void jspInit() {
try {
// JDBCドライバをロード
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception e) {
e.printStackTrace()...続きを読む

Aベストアンサー

画面に表示されないとの事ですが、エラーなどは
表示されていないのでしょうか…?

SQLでの構文エラーであればSyntaxエラーなど出るはずですが…。


あとlikeを使っている所と、使っていない所は
何か違うのでしょうか?
共にテキストボックスからの値とコメントには書かれていますが…。

QjavaでDBから取得したデータのJSP表示

JAVAでDBから取得し
ArrayList shikakuCdList = shikakuCd_Data();
request.setAttribute("shikakuCdList", shikakuCdList);

JSPでコンボボックスに表示しようと思います
<% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%>


<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<option value=" (1)ここの記述方法も  "></option>
<% }%>

という記述にしていますが、うまく動きません。
よろしくお願いします。

Aベストアンサー

><% for ( int i = 0; i < bumonlist.size(); i++ ){%>
><option value=" (1)ここの記述方法も  "></option>
><% }%>
この部分ですが、

もし、shikakuCd_Data()の返すArrayListの中身が
JavaBean(下記はTestBean)であれば、

<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<% TestBean test = (TestBean)bumonlist.get(i); %>
<option value="<%= test.ゲッター %>"></option>
<% }%>

もしくは、useBeanアクションをつかい、
coreライブラリのforEachタグを使って出力する方法もあります。
こちらの方法がお勧めですが。

QJSPで