ホームページのフォームに名前と番号の二つの列があって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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクトの中のプロパティ...
-
hiddenの値が期待した値で取得...
-
No such validation エラー
-
JSPでImportエラーになります
-
PropertyNotFoundException解決...
-
ログイン画面
-
JSPからServletに、テーブルに...
-
テーブルの初期化
-
【Struts】bean:writeタグのpro...
-
Struts2 selectタグのmultiple...
-
WebWork(struts2)でのパラメー...
-
StrutsでJSPからListを受け取り...
-
同時アクセス時の動作
-
Java Struts ~に対するゲッタ...
-
System.err. printlnとSystem.o...
-
ダブルクォーテーションのrepla...
-
javaで質問です。 文字列2023/2...
-
C言語のポインターに関する警告
-
パソコンキーボードで時分秒を...
-
Javaで改行などが出来ないのです。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オブジェクトの中のプロパティ...
-
StrutsでJSPからListを受け取り...
-
JSPでImportエラーになります
-
hiddenの値が期待した値で取得...
-
JSPからServletに、テーブルに...
-
<s:iterator>の値をリストで取...
-
requestの値が削除されません…
-
Java Struts ~に対するゲッタ...
-
【Struts】bean:writeタグのpro...
-
iterateで受け取った値を処理に...
-
JSPでDBからデータ読み込みブラ...
-
PropertyNotFoundException解決...
-
【struts】 ActionFormで別のAc...
-
JSPにて、変数を利用してフォン...
-
JSFタグ<h:dataTable>でヘッダ...
-
Struts2 selectタグのmultiple...
-
DOMでXMLからデータを抽出する...
-
データベースに変数の値を挿入
-
全取得したデータをjspで順番に...
-
java strutsでの一覧表の表示方...
おすすめ情報