• ベストアンサー

JSPで複数の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>

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

  • ベストアンサー
  • NeilMania
  • ベストアンサー率30% (40/131)
回答No.2

画面に表示されないとの事ですが、エラーなどは 表示されていないのでしょうか…? SQLでの構文エラーであればSyntaxエラーなど出るはずですが…。 あとlikeを使っている所と、使っていない所は 何か違うのでしょうか? 共にテキストボックスからの値とコメントには書かれていますが…。

earlgyreprince
質問者

補足

画面には真っ白の表示が出るだけの状態です。 エラーは出ていない様です。。。 likeは前のJSPから持ってきた値(氏名)のあいまい検索です。 もう1つはあいまい検索する必要がないので使用していないという現状です。 宜しくお願い致します。

その他の回答 (3)

  • NeilMania
  • ベストアンサー率30% (40/131)
回答No.4

追加ですが、まったく表示されないって事はありませんでした。 結果って表示はされましたし…。本当に まったく表示されないのであればHTMLだけでも表示されるか 確かめた方がいいかと…。

earlgyreprince
質問者

お礼

テーブルはそれぞれ見てループでレコードを出したいので 分ける必要がありました。。。 もう1度Resultの部分を確認したいと思います。 あとHTMLの部分もです。 実際に試して頂いたりしてありがとうございました☆

  • NeilMania
  • ベストアンサー率30% (40/131)
回答No.3

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などを考えた方がいいかもしれないです。

  • mahny
  • ベストアンサー率74% (57/77)
回答No.1

> 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で試しましたが それを分けてやるとちゃんと動きますね。

earlgyreprince
質問者

補足

ありがとございます。 rs=SQL文を上書きしていると言う事ですか? ありがとうございます。 分けると仰っているのはどの様に記述すれば宜しいのでしょうか? rs1=SQL rs2=SQL とかでしょうか? 宜しくお願い致します。

関連するQ&A