ホームページのフォームに名前と番号の二つの列があってname[1],bango[1]...のようになっています。
それを番号があるものだけをMySQLに登録したいのですがうまくいきません。
以下に試しに作ったservletを書きます。
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class program2 extends HttpServlet{
private static final String CONTENT_TYPE = "text/html; charset=Shift_JIS";
//private static final String CONTENT_TYPE = "text/html; charset=EUC_JP";
//private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
private String server;
private String db;
private String user;
private String pass;
private String url;
private Connection con = null;
//グローバル変数の初期化
public void init() throws ServletException{
/*変数の初期化*/
server = "localhost"; //MySQLサーバ名またはIPアドレス
db = "database"; //データベース名
user = "root"; //MySQLユーザ名
pass = "data"; //MySQLパスワード
/* 必要であればオプションの指定 */
url = "jdbc:mysql://" + server + ":3306/" + db
+ "?useUnicode=true&characterEncoding=Shift_JIS"; //JDBC URL Shift_JIS
/*DB初期処理*/
try{
/* JDBCドライバのロード */
Class.forName("com.mysql.jdbc.Driver").newInstance();
/* MySQLサーバ接続 */
con = DriverManager.getConnection(url, user, pass);
} catch (SQLException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
/*HTTP Get リクエストの処理*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException{
//エンコード
request.setCharacterEncoding("Shift_JIS");
//FORMからの第一次受け渡し
String name = "naoki";
String jikoku = "1200";
//for文の始まり
for(int i = 1; name != null; i++){
//if文の始まり
if(jikoku != null){
//FORMからの第一次受け渡し
name = request.getParameter("name["+ i +"]");
jikoku = request.getParameter("jikoku["+ i +"]");
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文の終了
}//for文終了
}
/*サーブレットインスタンスが破棄されるときに、サーブレットコンテナに最後に1度呼び出される*/
public void destroy(){
/* 切断 */
try{
if (con != null){
con.close();
con = null;
}
} catch (Exception e){
e.printStackTrace();
}
}
}
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のコンパイル環境ないので間違っているかもしれませんが、適宜修正してください。
この回答への補足
わざわざソースプログラムを書いていただき、ありがとうございます。
実行し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="送信">
記述していただいたプログラムのコンパイルですが、問題なくできました。
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のどちらかが取得されるはずです。
上記部分をもう一度見直してみてください。
この回答への補足
凡ミスをしていました。ご迷惑をおかけしてすみませんでした。
本線と脱線するような気もするのですがご相談させていただきます。
登録はうまくいくのですが、MySQLで確認すると文字化けしてしまいます。
ソースコードに書いていますが文字化け対策として
request.setCharacterEncoding("Shift_JIS");
をしていますが登録されているときには文字化けしています。
他のjavaサーブレットの文字を表示するプログラムは正しく表示されます。
javaの質問をするところで恐悦至極に思いますがご意見お願いいたします。
参考にしましたサイト
http://www.atmarkit.co.jp/fjava/rensai3/mojibake …
文字化けはHTMLの設定をしていなかったせいでした。申し訳ありませんでした。
今日一日ほとんど朝から親身になってご教授していただき
非常に心強く粘り強く教えていただいたこととても感謝しております。
ProKaseifu様本当にありがとうございました。
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 +"]");
かも
No.3
- 回答日時:
ぱっと見ですが
String nameとString jikokuは
配列ですのでString[] name=new name[100];
String[] jikoku=new jikoku[100]だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
hiddenの値が期待した値で取得...
-
No such validation エラー
-
オブジェクトの中のプロパティ...
-
JSPでImportエラーになります
-
<s:iterator>の値をリストで取...
-
iterateで受け取った値を処理に...
-
Struts2 selectタグのmultiple...
-
JSPからServletに、テーブルに...
-
JSPにて、変数を利用してフォン...
-
Java Struts ~に対するゲッタ...
-
【struts】 ActionFormで別のAc...
-
StrutsでJSPからListを受け取り...
-
ループ処理の際、最後だけ","を...
-
JSPやサーブレットでSystem.out...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
-
ダブルクォーテーションのrepla...
-
SwingでJtableのヘッダ行が表示...
-
javaで質問です。 文字列2023/2...
-
ORA-01858: 数値を指定する箇所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オブジェクトの中のプロパティ...
-
JSPからServletに、テーブルに...
-
Java Struts ~に対するゲッタ...
-
requestの値が削除されません…
-
JSPでImportエラーになります
-
StrutsでJSPからListを受け取り...
-
hiddenの値が期待した値で取得...
-
<s:iterator>の値をリストで取...
-
PropertyNotFoundException解決...
-
JSPでDBからデータ読み込みブラ...
-
1ページに10件ずつ表示したい
-
JSFタグ<h:dataTable>でヘッダ...
-
JSPにて、変数を利用してフォン...
-
Struts2 selectタグのmultiple...
-
全取得したデータをjspで順番に...
-
【struts】 ActionFormで別のAc...
-
入力チェックとエラーメッセー...
-
javaの環境変数の%CATALINA_HOM...
-
iterateで受け取った値を処理に...
-
JSPでの文字列編集出力
おすすめ情報