
翔泳社「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週間がたってしまいました。ご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
パラメータtitleだけではなく、
パラメータisbnがちゃんと取れていますか?
where句で絞込みをしているので、isbnが間違っていると、
更新対象が0件になります。
この回答への補足
ご指摘の通りifブロック内でh1タグ内にout.println(request.getPrameter("isbn")+iを書いて実行してみたところ、null値が返ってきていました。しかし、Display ie HTTP Headersというツールでクエリ情報を確認してみたところ、クエリは正常に送信されているようです。もしよろしければ考えられる原因などご回答くだされば幸いです。もちろん自分でもこれから原因を探って見たいと思います。ありがとうございました。何かヒントを得た気がします。
補足日時:2010/03/09 16:31No.2
- 回答日時:
参考URLにあるコードを使って、全パラメーターを表示してみてください。
名前が間違っていたりしませんか?
2バイト文字になっていたなんて事は、なかなか気づきにくい間違いだったりします。
参考URL:http://www.atmarkit.co.jp/fjava/rensai2/jspservl …
回答ありがとうございます。様々やっていたら知らぬ間に正常に動作するようになっていました。あまり気持ちのいい終わり方ではないですが、自分が何をやったかをノートにまとめてこの項は終わりたいと思います。ご紹介いただいたページもとても参考になる内容でしたので大切に保存させていただきました。
ほんとにありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化けについて
-
JAVA JSPにてSQL UPDATE文が実...
-
JSPから値を送ったときのServle...
-
JSPでのサブミット判定
-
strutsを使ってテキストエリア...
-
「<c:forEach タグが終了し...
-
htmlからjspへ処理を移す方法が...
-
アンケートの回答時間を計り,...
-
非アクティブな画面を操作する...
-
テキストフィールドの値をほか...
-
自分のファイル名取得
-
log4jでログレベルが取得できな...
-
C言語でプログレスバーを表示す...
-
CPUを2つ搭載するといいのです...
-
VB6 開発環境のエディタに行...
-
プログラミングに詳しい方、HTA...
-
腕時計の時報をならないように...
-
F5でリロードしないとセッシ...
-
三菱GOTの画面切り替えについて
-
ActiveWorkbook.Pathの一つ下の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リクエストに応じたselectedの...
-
int型の内容をbyteの配列にコピー
-
「<c:forEach タグが終了し...
-
フォーム上で押されたボタンに...
-
フォームで同じ複数のnameで違...
-
JSPでのリストボックス表示
-
jspでjavascript関数へ引数を渡...
-
strutsを使用したjspでjavascri...
-
JSPでのサブミット判定
-
StrutsでPOSTのデータ(リクエ...
-
ラジオボタンの選択肢をサーブ...
-
動的に作成したラジオボタンの...
-
EL式 true falseを表示
-
JSFでJavaScriptを使用するには?
-
Strutsで、どのRadioボタンが選...
-
jspファイルで注文フォームの合...
-
Struts2のifタグについて
-
無設定S2Strutsについて
-
javaでDBから取得したデータのJ...
-
log4jのレベルをdebugにすると...
おすすめ情報