JAVA JSPにてSQL UPDATE文が実行されない

このQ&Aのポイント
  • 翔泳社「10日でおぼえるJSP/サーブレット」をもとにJSP/サーブレットを学習中です。
  • この書籍の6-3データベースのデータの更新、削除の項で、サンプルが上手く動作しないので、みなさんにご教授願いたく投稿させていただきました。
  • 削除したいレコードにチェックを入れてボタンを押すとデータが削除され正しく動作しますが、タイトルや価格を変更してもレコードの更新がおこなわれません。
回答を見る
  • ベストアンサー

JAVA JSPにてSQL UPDATE文が実行されない

翔泳社「10日でおぼえるJSP/サーブレット」をもとにJSP/サーブレットを学習中です。この書籍の6-3データベースのデータの更新、削除の項で、サンプルが上手く動作しないので、みなさんにご教授願いたく投稿させていただきました。長文になりますがよろしくお願いいたします。 内容はまず、以下のフォームにデータベースからデータを取得し、更新、削除行うというものです。 「ファイル名p_update1.jsp」 <form method="POST" action="p_update2.jsp"> <input type="submit" value="更新/削除" /> <input type="reset" value="取消" /> <table border="0"> <tr style="background:#00ccff"> <th>削除</th><th>ISBNコード</th><th>書名</th> <th>価格</th><th>出版社</th><th>刊行日</th> </tr> <% while(rs.next()){ %> <tr style="background:#ffffcc"> <td><input type="checkbox" name="delete<%=count %>" value="1" /></td> <td><%=rs.getString("isbn") %> <input type="hidden" name="isbn<%=count %>" value="<%=rs.getString("isbn")%>" /></td> <td> <input type="text" name="title<%=count %>" size="25" value="<%=rs.getString("title")%>" /></td> <td> <input type="text" name="price<%=count %>" size="5" value="<%=rs.getString("price")%>" />円</td> <td> <select name="publish<%=count %>"> <% for(String pub : pubs){ <option value="<%=pub %>" <% if(pub.equals(rs.getString("publish"))){ out.print("selected='seleced'"); } %>><%=pub %></option> <% } %> </select></td> <td> <input type="text" name="published<%=count %>" size="12" value="<%=dformat.format(rs.getDate("published")) %>" /></td> </tr> <% count++; } rs.close(); ps.close(); db.close(); %> </table> <input type="hidden" name="count" value="<%=count %>" /> </form> %> このファイルは正しく動作し、データベースからデータが取得できます。削除したいレコードにチェックを入れてボタンを押すとデータが削除され正しく動作しますが、タイトルや価格を変更してもレコードの更新がおこなわれません。 受け取り側のファイルの内容です。 「ファイル名p_update2.jsp」 <% request.setCharacterEncoding("Windows-31J"); InitialContext context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/Jsp10"); Connection db = ds.getConnection(); db.setAutoCommit(false); PreparedStatement up = db.prepareStatement("UPDATE book SET title=?, price=?, publish=?, published=? WHERE isbn=?"); PreparedStatement del = db.prepareStatement("DELETE FROM book WHERE isbn=?"); int count = Integer.parseInt(request.getParameter("count")); for(int i=1;i<count;i++){ if(request.getParameter("delete" + i)==null){ up.setString(1, request.getParameter("title" + i)); up.setString(2, request.getParameter("price" + i)); up.setString(3, request.getParameter("publish" + i)); up.setString(4, request.getParameter("published" + i)); up.setString(5, request.getParameter("isbn" + i)); up.executeUpdate(); }else{ del.setString(1, request.getParameter("isbn" + i)); del.executeUpdate(); } } up.close(); del.close(); db.commit(); db.close(); response.sendRedirect("p_update1.jsp"); %> 試しにifブロック内でout.println(request.getParameter("title")+i)をh1タグ内に記述して実行すると、タイトル名がきちんと表示されるので、とりあえずifブロック内に処理が移っていて、フォームから送信された情報は取得できているようです。 次にフォームから送信された情報ではなく、以下を実行してみると、きちんとデータベースが更新されます。 up.setString(1, "PHPライブラリコレクション"); up.setString(2, "2500"); up.setString(3, "翔泳社"); up.setString(4, "2000-04-04"); up.setString(5, "978-4-7980-1616-0"); up.executeUpdate(); 各ソフトウェアのバージョン等 apache tomcat 6.0 jdbcドライバ mysql-connector-java-5.1.10-bin.jar MYSQL 5.0.87 java JDK 1.6.0_13 eclipse 3.5 です。 何が問題か未だ解決できず、1週間がたってしまいました。ご教授お願いいたします。

  • Java
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.1

パラメータtitleだけではなく、 パラメータisbnがちゃんと取れていますか? where句で絞込みをしているので、isbnが間違っていると、 更新対象が0件になります。

nevagiva
質問者

お礼

回答ありがとうございます。早速これから確認してみます。

nevagiva
質問者

補足

ご指摘の通りifブロック内でh1タグ内にout.println(request.getPrameter("isbn")+iを書いて実行してみたところ、null値が返ってきていました。しかし、Display ie HTTP Headersというツールでクエリ情報を確認してみたところ、クエリは正常に送信されているようです。もしよろしければ考えられる原因などご回答くだされば幸いです。もちろん自分でもこれから原因を探って見たいと思います。ありがとうございました。何かヒントを得た気がします。

その他の回答 (1)

  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.2

参考URLにあるコードを使って、全パラメーターを表示してみてください。 名前が間違っていたりしませんか? 2バイト文字になっていたなんて事は、なかなか気づきにくい間違いだったりします。

参考URL:
http://www.atmarkit.co.jp/fjava/rensai2/jspservlet05/jspsevlet05_2.html
nevagiva
質問者

お礼

回答ありがとうございます。様々やっていたら知らぬ間に正常に動作するようになっていました。あまり気持ちのいい終わり方ではないですが、自分が何をやったかをノートにまとめてこの項は終わりたいと思います。ご紹介いただいたページもとても参考になる内容でしたので大切に保存させていただきました。 ほんとにありがとうございました。

関連するQ&A

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

    • ベストアンサー
    • Java
  • 登録ボタンを押すとjspファイルが開かれてしまう

    環境は IE 8 MySQL 5.5 Java 6 です。 form method="POST" で取得したデータをDBに登録させたいと思いますが、 登録ボタンを押すとなぜかファイルを開く・保存の画面が出てしまいました。 どの部分がおかしいのでしょうか? HTML側 <html> <head> <title>情報登録</title> </head> <body> <h1 style="background:#cccccc">情報登録</h1> <form method="POST" action="p_insert.jsp"> <table border="0"> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">名前</th> <td><input type="text" name="nam" size="35" /></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">URL</th> <td><input type="text" name="url" size="100" /></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">入手日</th> <td><input type="text" name="gdate" size="14" />(YYYY/MM/DD)</td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">ランク</th> <td> <select name="grade"> <option value="5">大変良い</option><option value="4">良い</option> <option value="3">普通</option><option value="2">悪い</option> <option value="1">非常に悪い</option> </select> </td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">メモ</th> <td><input type="text" name="memo" size="100" /></td> </tr> <tr> <td colspan="2"> <input type="submit" value="登録" /> <input type="reset" value="取消" /> </td> </tr> </table> </body> </html> JSP側 <%@ page contentType="text/html; charset=Shift_JIS" import="java.sql.*,java.io.*" %> <%! public String strEncode(String strVal) throws UnsupportedEncodingException{ if(strVal==null){ return (null); }else{ return (new String(strVal.getBytes("ISO-8859-1"),"JISAutoDetect")); } } %> <% Class.forName("org.gjt.mm.mysql.Driver"); Connection db=DriverManager.getConnection( "jdbc:mysql://localhost:3306/データベース名" + "?user=jsp10&password=jsp10&useUnicode=true&characterEncoding=Shift_JIS"); Statement sttSql=db.createStatement(); sttSql.executeUpdate( "INSERT INTO aaalist(name,url,gdate,grade,memo) VALUES('" + strEncode(request.getParameter("name")) + "','" + request.getParameter("url") + "','" + request.getParameter("gdate") + "'," + request.getParameter("grade") + ",'" + strEncode(request.getParameter("memo")) + "')"); sttSql.close(); db.close(); response.sendRedirect("p_insert.html"); %>

    • ベストアンサー
    • Java
  • jsp、サーブレットの質問です。

    Tomcatを使用してjspとサーブレットを使い掲示板のような投稿サイトもどきを作成していますが解決できない部分があります。 ↓は表示用のjspです♪ <html> <head> <title>Insert title here</title> </head> <body> <% String lsts = (String)request.getAttribute("lst"); %> <table border="4"> <tr> <td>日時</td> <td>タイトル</td> <td>スレッド主</td> <td></td> </tr> <tr> <td><%for(int i = 0; i<lsts.length(); i++){ out.println(lsts); } %> </td> <td><%out.println(); %></td> <td><%out.println("");%></td> <td> </td> </tr> </table> </form> </body> </html> こちらがサーブレットです otected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*DB接続処理は省略します*/ try{ ps = (PreparedStatement) con.prepareStatement(sql); String sql = "select * from thred"; ResultSet rs = ps.executeQuery(); //テーブル内一覧取得 while(rs.next()){ rs.getString("time"); rs.getString("title"); rs.getString("id"); rs.getString("thredid"); String s = (rs.getString("time")+","+ rs.getString("title")+","+rs.getString("id")); String[] lsts = s.split(","); List<String> thlists = Arrays.asList(lsts); String ss = (thlists.get(0)); request.setAttribute("thlst",ss); RequestDispatcher dispatcher= request.getRequestDispatcher("/list.jsp"); dispatcher.forward(request,response); } }catch(SQLException e){ e.printStackTrace(); } catch(ClassNotFoundException e){ e.printStackTrace(); }finally{ try { con.close(); } } } jspの方にサーブレットでthredDBから抜き取ったtimeとtitleとidを全て表示させたいのですが 現状だと 2014-06-03 06:45:02  aaaa 1 の行だけがたくさん表示されてしまいます 恐らくスコープを取得した時点でこの↑の1行のものしかとれてこれていないのだと思います... どのように処理を行ったらよいのでしょうか? DBの中身は画像添付いたしますっ

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

    • ベストアンサー
    • Java
  • JSP表示エラー?

    たびたびすみません リクエストから取ってきたコメントどうしても表示ができないです。 環境は tomcat5.5 postgresql8.2 データベースエンコーディングはEUC_JP JSPファイルもEUC形式で保存してます。 コメント欄に日本語を入力するとエラーが出てしまいます。 JSPファイル1 <%@ page contentType="text/html; charset=euc-jp"pageEncoding="euc-jp" %> <%@ page import="java.sql.*,atmarkit.MyDBAccess" %> <% // 内容: データベースにアクセスする MyDBAccess db = new MyDBAccess(); db.open(); ResultSet rs = db.getResultSet("SELECT * FROM SHAINLIST order by member_id"); String tableL = "<table border=1>"; tableL += "<tr bgcolor=\"000080\"><td><font color=\"white\">ID</font></td>" + "<td nowrap><font color=\"white\">名前</font></td>" + "<td colspan=2><font color=\"white\">出欠</font></td>"; while(rs.next()) { int id = rs.getInt("member_id"); String name = rs.getString("name"); String age = rs.getString("age"); int state = rs.getInt("attendance"); String comment = rs.getString("comment"); if(comment != null){ comment = new String(comment.getBytes("8859_1"),"EUC_JP"); } 以下~略 JSPファイル2 <%@ page contentType="text/html; charset=euc-jp"pageEncoding="euc-jp" %> <%@ page import="java.sql.*, atmarkit.MyDBAccess" %> <% // 内容: データベースにアクセスする // 入力された引数を取得する String comment = request.getParameter("comment"); String attendance = request.getParameter("attendance"); String member_id = request.getParameter("member_id"); // MyDBAccess のインスタンスを生成する MyDBAccess db = new MyDBAccess(); // データベースへのアクセス db.open(); // データベース更新用のSQL文を作成 String sql = "update shainlist set comment='" + comment + "', attendance=" + attendance + " where member_id=" + member_id; // SQL文を実行 db.execute(sql); くわしい方教えていただけないでしょうか よろしくお願いします。

    • ベストアンサー
    • Java
  • jsp 通販サイト作成での質問

    jspを使い通販サイトを作成しています 「session.jsp」では商品の選択をし選んだ商品をsessionを用いて 次のページの「cart.jsp」で表示するというものなのですが 「session.jsp」の下部で、カートに入れる のボタンを押した数に応じて 選んだ商品の数を表示するものを作ったのですが上手くカウントできていません size()を使い商品数を表示したいのですが上手くいきません どなたかよろしくお願いします <%@ page contentType="text/html;charset=Shift_JIS"%> <%@ page import= "java.util.ArrayList" %> <%@ page session="true" %> <% request.setCharacterEncoding("Shift_JIS"); String[] Price = {"4000","2500","500","3000","1500"}; String[] Name ={"たらばがに","毛ガニ","いか","うに","あわび"}; String[] Img ={"taraba.gif","ke.gif","ika.gif","uni.gif","awabi.gif"}; String message =""; String abc =""; String selectValues=request.getParameter("select"); String[] array=new String[3]; if(selectValues !=null){ array[0]=Name[Integer.parseInt(selectValues)]; array[1]=Price[Integer.parseInt(selectValues)]; array[2]=Img[Integer.parseInt(selectValues)]; ArrayList<String> i = new ArrayList<String>(); i.add(selectValues); //ここが問題点です abc="かごの中身は"+i.size()+"個です"; }else{ abc="商品を入れてください"; } %> <center><h1>海産物ショッピング</h1></center> <html> <head> <title>海産物ショッピング</title> </head> <body> <div align="center"> <hr> <form action="session.jsp"> <table border ="1"> <tr><th>たらばがに</th><th><img src="img/taraba.gif"></img></td></th><td>¥4000円<input type ="hidden" name=select value="0"><input type="submit" name=keyword value="カートに入れる"></input></td> </form> <form action="session.jsp"> </tr><tr><th>毛ガニ</th><th><img src="img/ke.gif"></img></td></th><td>¥2500円<input type ="hidden" name=select value="1"><input type="submit" name=keyword value="カートに入れる"></td></tr> <tr><th>いか</th><th><img src="img/ika.gif"></img></td></th><td>¥500円<input type ="hidden" name=select value="2"><input type="submit" name=keyword value=" カートに入れる"></td></tr> <tr><th>うに</th><th><img src="img/uni.gif"></img></td></th><td>¥3000円<input type ="hidden" name=select value="3"><input type="submit" name=keyword value="カートに入れる"></td></tr> <tr><th>あわび</th><th><img src="img/awabi.gif"></img></td></th><td>¥1500円<input type ="hidden" name=select value="4"><input type="submit" name=keyword value="カートに入れる"></td></tr> </table><br> </form> <table border ="1"> </table><br> <%=message %> <%=abc %> <hr> </div> </body> </html>

    • ベストアンサー
    • Java
  • JSPのIF文を教えて下さい

    こんばんわ。 JSPにてIF文を使ったDBテーブル表示のWEBを作成したのですが クローズの行でエラーが表示されてしまいます。 エラー内容は「型の開始が不正」ですというものです。 知識不足で恐縮ですがご教示願います。 <%@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> <CENTER> <B>一覧</B> <TABLE border="3" BORDERCOLOR="#9999ff"> <TR> <TD>年齢</TD> <TD>電話番号</TD> </TR> String year = request.getParameter("年齢"); String namber = request.getParameter("電話番号"); <% // データベースへのアクセス開始 Connection con = null; Statement stmt = null; ResultSet rs = null; try { // データベースに接続するConnectionオブジェクトの取得 con = DriverManager.getConnection("jdbc:sqlserver://sqlserverName;DatabaseName=NAME","ID","PW"); // データベース操作を行うためのStatementオブジェクトの取得 stmt = con.createStatement(); if(year.length() >= 0){ %> // SQL()を実行して、結果を得る rs = stmt.executeQuery("SELECT * FROM テーブルA where 年齢='"+ paramA +"'"); rs = stmt.executeQuery("SELECT * FROM テーブルB where 年齢='"+ paramA +"'"); <% } else if(namber.length() >= 0){ %> rs = stmt.executeQuery("SELECT * FROM テーブルA where 電話番号='"+ paramC +"'"); rs = stmt.executeQuery("SELECT * FROM テーブルB where 電話番号='"+ paramC +"'"); <% } %> // 得られた結果をレコードごとに表示 while (rs.next()){ String aa = rs.getString("名前"); String bb = rs.getString("住所"); %> <TR bgcolor="#ccffcc"> <FORM method="post" action="Next.jsp"> <input type="hidden" name="num" value="<%= rs.getString("ID")%>"> <%-- 年齢フィールドの表示 --%> <TD><%= aa %></TD> <%-- 電話番号フィールドの表示 --%> <TD><%= bb %></TD> <TD align="center"> </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>

    • ベストアンサー
    • Java
  • JSP→JSP フォームチェック

    困っているので助けてください。 まずプログラムの説明をさせてもらいます。 JSPからfromをつかってJSPにフォーム情報を送ります。 プログラムはこんな感じです。 <form action="abcdefg.jsp" method="post"> <input type="hidden" name="abc" value="abc"> <input type="hidden" name="def" value="def"> <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="bb" value="bb"> <input type="checkbox" name="cc" value="cc"> <input type="submit" value="次へ"> </form> これをabcdefg.jspで受け取る場合 String hidden_abc = request.getParameter("abc"); String hidden_def = request.getParameter("def"); とhiddenは必ず値が入っているのでこれで受け取れるのですが チェックボックスは選択しているかどうかわからないので上の記述では だめなようなのですがどのようなプログラムを書いたらいいのですか? 説明がうまく出来なく申し訳ないです。よろしければ教えてください。

    • ベストアンサー
    • Java
  • JSP DB 表示

    こんにちは。DBから取得 JSPに表示を勉強しています。 条件が 列指定 前方指定 昇順降順などあり 列ごとに取得 表示といった形で表示することができました ただこれだと 横に表示されるのですが、どうすれば縦に表示できるように 組みなおせますか?それかこの組み方だとHTMLでがんばったほうが良いのでしょうか?アドバイスお願いします JSP(検索、表示) <table border> <tr> <td> 検索内容 TESTNO <input type="checkbox" name="TESTNO" value="TESTNO" </td> <td> NAME <input type="checkbox" name="NAME" value="NAME" > </td> <td> KANA <input type="checkbox" name="KANA" value="KANA" > </td> </tr> </table border> <table border> <tr> <td> 検索条件 <input type="text" name="name" >(NAME前方一致) </td> </table> <table border> <tr><td> ソート   <select name="menu"> <option value=TESTNO>TESTNO</option> <option value=NAME>NAME</option> <option value=KANA>KANA</option> </select> <input type="radio" name="narabi" value="ASC" /> 昇順 <input type="radio" name="narabi" value="DESC"/> 降順 </td></tr> </table> <br><input type="submit" value="検索"> </from> </body> </form> <Hr> <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ if(request.getAttribute("list")!=null){ List list=(List)request.getAttribute("list"); for(int i=0; i<list.size(); i++){ out.print(list.get(i)+" "); } } %><br> <% if(request.getAttribute("list1")!=null){ List list1=(List)request.getAttribute("list1"); for(int i=0; i<list1.size(); i++){ out.print(list1.get(i)+" "); } } %><br> <% if(request.getAttribute("list2")!=null){ List list2=(List)request.getAttribute("list2"); for(int i=0; i<list2.size(); i++){ out.print(list2.get(i)+" "); } } %><br> サーブレット(取得、フォワードで転送) String name=request.getParameter("name"); //NAMEの前方一致条件取得 String narabi=request.getParameter("narabi"); //降順、昇順、の値取得 String menu=request.getParameter("menu"); //昇順、降順するところの列 name取得 db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+1+",'山田', 'ヤマダ')"); db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+2+",'佐藤', 'サトウ')"); ・・・・・・ //課題のため10行入力 db.commit(); //コミットして 確定 ArrayList list; ArrayList list1; ArrayList list2; //リスト作成 if(narabi!=null){//昇順 降順にチェックがあるか判断 String[][]hai4=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%' order by "+menu+" "+narabi+" ;"); //nameで前方一致 menuで昇順降順場所 narabiで降順昇順 list = new ArrayList(Arrays.asList(hai4[0])); list1 = new ArrayList(Arrays.asList(hai4[1])); list2 = new ArrayList(Arrays.asList(hai4[2])); }else{//昇順降順なければこっち String[][]hai3=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%';"); //nameで前方一致 list = new ArrayList(Arrays.asList(hai3[0])); list1 = new ArrayList(Arrays.asList(hai3[1])); list2 = new ArrayList(Arrays.asList(hai3[2])); } if (request.getParameter("TESTNO") != null){ request.setAttribute("list", list); } if (request.getParameter("NAME") != null){ request.setAttribute("list1", list1); } if (request.getParameter("KANA") != null){ request.setAttribute("list2", list2); } 結果 1 2 3 4 5 6 7 8 9 10 山田 佐藤 山本 伊藤 武田 鈴木 小野 松井 田中 高橋 ヤマダ サトウ ヤマモト イトウ タケダ スズキ オノ マツイ タナカ タカハシ 1 山田 ヤマダ 2 佐藤 サトウ ・・・・・・ といった表示にしたいです 行ごとに取得して繰り返すのがいいのかなと思って最初やていたのですが 列指定したときに エラー(指定listがない)といったようになるので この組み方にしました。 アドバイスお願いします

    • ベストアンサー
    • Java
  • JSPのIF構文教えて下さい!

    こんにちわ。 現在、ログイン認証でPWによって次に表示するJSPを作りたいのですが、お恥ずかしい事にIF構文を差し込む所が分かりません。。。 <FORM method="post" action="view.jsp">と<FORM method="post" action="viewx.jsp">で分けるイメージです。 自分でもやってみましたが処理が分岐しません。 勉強不足ですみませんがお知恵をお貸し下さい!お願い致します。 <%@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 bgcolor="#ffffcc"> <CENTER> <span style="font-size:24pt;color:#cc99cc"><B>検索結果一覧</B></span> <CENTER><%=request.getParameter("str")%></br> <br><br> <TABLE border="3" BORDERCOLOR="#9999ff" cellspacing="1" cellpadding="1"> <TR> <TD><span style="font-size:11pt;color:#336000">F1</span></TD> <TD><span style="font-size:11pt;color:#336000">F2</span></TD> <TD><span style="font-size:11pt;color:#336000">F3</span></TD> </TR> <% // データベースへのアクセス開始 Connection con = null; Statement stmt = null; ResultSet rs = null; try { // データベースに接続するConnectionオブジェクトの取得 con = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Name","ID","pw"); // データベース操作を行うためのStatementオブジェクトの取得 stmt = con.createStatement(); String param = (request.getParameter("param")); String pass = (request.getParameter("password")); // SQL()を実行して、結果を得る rs = stmt.executeQuery ("SELECT * FROM table where 番号='"+ param +"'"); // 得られた結果をレコードごとに表示 while (rs.next()){ %> <FORM method="post" action="view.jsp"> <input type="hidden" name="num" value="<%= rs.getString("id")%>"> <tr> <%-- レコードの区分フィールドはNull --%> <td></td> <%-- レコードのF1フィールドを表示 --%> <td><%= rs.getString("F1")%></td> <%-- レコードのF2フィールドを表示 --%> <td><%= rs.getString("F2")%></td> <%-- 詳細ボタンを表示 --%> <td><input type="submit" value="詳細表示"></td> </tr> </form> <% } } 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> <br></br> <center> <INPUT TYPE="button" NAME="btn3" value="戻る" onClick="JavaScript:history.back()"> </body> </html>

    • ベストアンサー
    • Java