プロが教えるわが家の防犯対策術!

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>

A 回答 (4件)

画面に表示されないとの事ですが、エラーなどは


表示されていないのでしょうか…?

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


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

この回答への補足

画面には真っ白の表示が出るだけの状態です。
エラーは出ていない様です。。。

likeは前のJSPから持ってきた値(氏名)のあいまい検索です。
もう1つはあいまい検索する必要がないので使用していないという現状です。

宜しくお願い致します。

補足日時:2007/07/11 22:51
    • good
    • 0

追加ですが、まったく表示されないって事はありませんでした。



結果って表示はされましたし…。本当に
まったく表示されないのであればHTMLだけでも表示されるか
確かめた方がいいかと…。
    • good
    • 0
この回答へのお礼

テーブルはそれぞれ見てループでレコードを出したいので
分ける必要がありました。。。

もう1度Resultの部分を確認したいと思います。
あとHTMLの部分もです。

実際に試して頂いたりしてありがとうございました☆

お礼日時:2007/07/13 09:45

rs = stmt.executeQuery("select * from table_A 年齢");


rs = stmt.executeQuery("SELECT * FROM table_B 年齢");

rs = stmt.executeQuery("SELECT * FROM TABLE_A 名前");
rs = stmt.executeQuery("SELECT * FROM TABLE_B 名前");

自分も実行しましたがココがダメみたいですね~。
DBをTABLE_AとTABLE_Bで分ける必要ってあるのですか…?
別に分ける必要がなければTABLE_Aに名前と年齢を一緒にして
SQL文を実行した方がいいと思います。

分ける理由があるのであれば#1の人の説明通り
ResultSetやStatementなどを考えた方がいいかもしれないです。
    • good
    • 0

> 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 +"'");
> }

SQL自体はDBのテーブル構成が分からないので置いておきますが…(多分平気)
単純にResultSetを上書きしているように見えます。

SQLServerは持ってないのでMySQLで試しましたが
それを分けてやるとちゃんと動きますね。

この回答への補足

ありがとございます。
rs=SQL文を上書きしていると言う事ですか?
ありがとうございます。

分けると仰っているのはどの様に記述すれば宜しいのでしょうか?
rs1=SQL
rs2=SQL
とかでしょうか?

宜しくお願い致します。

補足日時:2007/07/11 10:29
    • good
    • 0

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