• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java servletからMySQLに情報を登録したいのです。)

java servletでMySQLへの情報登録について

このQ&Aのポイント
  • java servletを使用して、ホームページのフォームから名前と番号をMySQLに登録したい
  • フォームの列名はname[1],bango[1]などの形式であり、番号があるものだけを登録したい
  • 試しに作ったservletでうまく登録できない。なお、MySQLの接続情報やクエリは正しい

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

  • ベストアンサー
回答No.5

DBの型(多分数値型?)にNULLを入れようとしてエラーになっているように見えます。 おそらくパラメータがちゃんと取れてないんじゃありませんか? 今のソースだとINSERTの前にnameとjikokuの値をが入っているかチェックされずにINSERT処理にいってしまうので、事前にチェックしたほうがいいかと。 doGetメソッドの中身ですが、do whileかwhileに書き直したほうがよいのでは?(do whileあんまり好きじゃないのでwhileで書いてみます) /*HTTP Get リクエストの処理*/ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //エンコード request.setCharacterEncoding("Shift_JIS"); //FORMからの第一次受け渡し int i = 1; String name = request.getParameter("name["+ i +"]"); String jikoku = request.getParameter("jikoku["+ i +"]"); //for文の始まり while ( name != null && !name.equals("") ){ if ( jikoku != null && !jikoku.equals("") ) { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); Statement stmt = null; ResultSet rs = null; try{ /* 検索するSQL文を作成 */ String sql = "INSERT INTO table1 (eki,jikoku) VALUES ('"+name+"','"+jikoku+"') "; /* Statementオブジェクトの生成とクエリの実行 */ stmt = con.createStatement(); stmt.executeUpdate(sql); /* 切断 */ stmt.close(); } catch (SQLException e){ out.println("<h3>登録に失敗しました</h3>"); e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } finally{ /* finallyを使って資源の解放 */ try{ if (stmt != null){ stmt.close(); stmt = null; } } catch (Exception e){ e.printStackTrace(); } } }//if文の終了 else{ // jikokuが空っぽだよー } //FORMからの第一次受け渡し i++; name = request.getParameter("name["+ i +"]"); jikoku = request.getParameter("jikoku["+ i +"]"); }//for文終了 } javaのコンパイル環境ないので間違っているかもしれませんが、適宜修正してください。

mi2007n
質問者

補足

わざわざソースプログラムを書いていただき、ありがとうございます。 実行しMySQLからデータを確認したところ、 Emptyと表示されるので登録が失敗しているようです。 念のため、以下にHTMLを書きます。 <form action=http://localhost:8080/MyApp/servlet/program2 method=get> 名前<input name="name[1]" value="田中"> 時刻<input name="jikou[1]"><br> 名前<input name="name[2]" value="品川"> 時刻<input name="jikou[2]"><br> 名前<input name="name[3]" value="村上"> 時刻<input name="jikou[3]"><br> <br> <input type="submit" value="送信"> 記述していただいたプログラムのコンパイルですが、問題なくできました。

その他の回答 (5)

回答No.6

><form action=​http://localhost:8080/MyApp/servlet/program2​ method=get> >名前<input name="name[1]" value="田中"> 時刻<input name="jikou[1]"><br> >名前<input name="name[2]" value="品川"> 時刻<input name="jikou[2]"><br> >名前<input name="name[3]" value="村上"> 時刻<input name="jikou[3]"><br> <br> ><input type="submit" value="送信"> getParameterで取得するときのパラメータ名とhtmlのパラメータ名が不一致です。これでは取得できるはずがありません。(HTMLではjikou、サーブレット側はjikoku) 次に、時刻のvalueの設定がないのでパラメータを取得できたとしても""かnullのどちらかが取得されるはずです。 上記部分をもう一度見直してみてください。

mi2007n
質問者

お礼

文字化けはHTMLの設定をしていなかったせいでした。申し訳ありませんでした。 今日一日ほとんど朝から親身になってご教授していただき 非常に心強く粘り強く教えていただいたこととても感謝しております。 ProKaseifu様本当にありがとうございました。

mi2007n
質問者

補足

凡ミスをしていました。ご迷惑をおかけしてすみませんでした。 本線と脱線するような気もするのですがご相談させていただきます。 登録はうまくいくのですが、MySQLで確認すると文字化けしてしまいます。 ソースコードに書いていますが文字化け対策として request.setCharacterEncoding("Shift_JIS"); をしていますが登録されているときには文字化けしています。 他のjavaサーブレットの文字を表示するプログラムは正しく表示されます。 javaの質問をするところで恐悦至極に思いますがご意見お願いいたします。 参考にしましたサイト http://www.atmarkit.co.jp/fjava/rensai3/mojibake03/mojibake03.html

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.4

NO3.訂正 String[] name=new String[100]; String[] jikoku=new String[100]; で name[i] = request.getParameterValues("name["+ i +"]"); jikoku[i] = request.getParameterValues("jikoku["+ i +"]"); かも

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

ぱっと見ですが String nameとString jikokuは 配列ですのでString[] name=new name[100]; String[] jikoku=new jikoku[100]だと思います。

回答No.2

DBにインサートする部分でエラーが発生しているのでしょうか? エラーの内容を教えてください。

mi2007n
質問者

補足

エラー文があまりにも長くなってしまうので、はじめだけ書かせていただきます。 java.sql.SQLException: incorrect integer value: 'null' for column 'jikoku' at row1........ この後は非常に長くて書けませんでした。

回答No.1

どのへんが「うまくいきません」か? フォームのパラメータを受け取れない? DBにインサートできていない? 等。 質問はできるだけピンポイントで。

mi2007n
質問者

補足

上記のプログラムだとtomcatにエラーが排出されます。 以前今の状態と少し違いますがプログラムを作ったところ、 フォームからのパラメータ取得は出来ているようですが、 DBには登録できませんでした。 プログラムの概要ですが 「nameが無くなるまでループを行い、jikokuがある場合だけ登録する」という具合です。