サーブレットとMysqlについて

このQ&Aのポイント
  • サーブレットとMysqlについての質問
  • textboxの値をDBに書き込みたい
  • DBの設定がおかしいのかもしれない
回答を見る
  • ベストアンサー

サーブレットとMysqlについて

JSP サーブレット Mysqlについて質問です。 私が今実現させたいことを簡単に説明します。 画面側にはtextboxがあり、このtextboxは追加ボタンによって、 どんどん追加されていきます。 サーブレット側はこのtextboxの全ての値をDBに書き込みたいです。 例えば、textboxが二つなら、一つ目のINSERTでDBのname列にtextbox一個目の値を書き込み、二つ目のINSERTでDBのname列にtextboxニ個目の値を書き込む。 ソースを書いてみたのですが、いろいろと違いがあると思いますので、ご教示をお願いします。 現在は下記ソースを実行してもDBは更新されません・・ もしかしたら、DBの設定がおかしいのでしょうか・・ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_db.Sample_table (name) values (name10[i]);"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); }catch(Exception e){ //exception RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); } } }

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

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

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

前もアドバイスしたけど exceptionのところでstackトレースだしてみた? 出したら気づくと思うけど System.out.println ( sql ); でSQLも見てみて? DBの設定云々より、自分の想定している正しいSQLが生成されて発行されているのか確認しないと。 と確認してほしいところはそこなんだけど、実際はプリペアード使うなら置換用の文字は?になるんだ。 insert into Sample_db.Sample_table (name) values (?)

sadoxu
質問者

補足

ご回答ありがとうございます。 stackトレースをしてみます。 上記の質問はいろいろと試した結果insertすることができました! しかし、textboxは一つで一つの値しかないのにDBに2行insertされます。 これについては今再思考中です。 一応再質問をさせていただきます。

関連するQ&A

  • サーブレットとMysqlについて

    画面のtextboxからDB(Mysql)にinsertするときの質問です。 皆さんのおかげでinsertすることができました。 しかし、textboxが一個で値も一つなのに、 insertするとDBには2行同じ値がinsertされます。 下記のソースのどこがいけないのでしょうか? ご教示をお願いします。 「ソース」 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_table (name) values (?)"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); }catch(Exception e){ } } }

  • サーブレット mysqlについて

    JSP サーブレット mysqlについて質問です。 私が今実現させたいことを簡単に説明します。画面側にはtextboxがあり、このtextboxは追加ボタンによって、 どんどん追加されていきます。 サーブレット側はこのtextboxの全ての値をDBに書き込みたいです。 例えば、textboxが二つなら、一つ目のINSERTでDBのagi列にagis1とname列にtextbox一個目の値を書き込み、二つ目のINSERTでDBのagi列にagis2とname列にtextboxニ個目の値を書き込む。 ソースを書いてみたのですが、いろいろと違いがあると思いますので、ご教示をお願いします。 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name = request.getParameterValues("sonota"); Connection conn = null; Statement state = null; int count = 0; try { //コネクション接続 Class.forName("org.git.mm.mysql.Driver"); conn = DriverManager.getConnection( "jdbc:mysql://localhost/Sampl_db", "root", "taratara"); state = conn.createStatement(); String agis = getInitParameter("agis[i]"); for (int i = 0; i < agis.length(); i++) { //クエリ実行 state.executeUpdate( "INSERT INTO Sampl_teble(agi, name) VALUES(" + agis + ", " + name + ")"); } //影響レコード数出力 System.out.println(count); } finally { //ステートメントを閉じる if(state != null) { try { state.close(); } catch (Exception e) { //このエラー処理は「state.close」でエラーが発生した場合でも //下記処理が実行される為に記述しています。 } } //コネクションを閉じる if(conn != null) { conn.close(); } } }

    • ベストアンサー
    • Java
  • サーブレット、JSP、Mysqlについて

    Java サーブレット JSPについて質問です。 やりたいことは画面のtextboxの値をDBに書き込みたいです。 画面側でIDとパスワードを"sonota"にセットして、 サーブレット側はString[] name = request.getParameterValues("sonota"); で画面の値を取得できると思いますが、その以外の書き方がいまいちです・・ なお、textboxには追加ボタンがあり、押すとtextboxがどんどん増えていきます。 この場合はどのようにDBに書き込めばいいのでしょうか? 理想としては、textbox一個なら、DBは列agiは1でnameにはtextboxの入力した値をセット。 textbox二個なら、DBは列agi1とagi2を作成して、textbox二つの値をそれぞれに書き込む。 ソース protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name = request.getParameterValues("sonota"); Connection conn = null; Statement state = null; int count = 0; try { //コネクション接続 Class.forName("org.git.mm.mysql.Driver"); conn = DriverManager.getConnection( "jdbc:mysql://localhost/Sampl_db", "root", "taratara"); state = conn.createStatement(); //クエリ実行 count = state.executeUpdate( "INSERT INTO Sampl_teble(agi, name) VALUES('01', sonota)"); //影響レコード数出力 System.out.println(count); } finally { //ステートメントを閉じる if(state != null) { try { state.close(); } catch (Exception e) { //このエラー処理は「state.close」でエラーが発生した場合でも //下記処理が実行される為に記述しています。 } } //コネクションを閉じる if(conn != null) { conn.close(); } } } }

    • ベストアンサー
    • Java
  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • java servletからMySQLに情報を登録したいのです。

    ホームページのフォームに名前と番号の二つの列があって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(); } } }

    • ベストアンサー
    • Java
  • jspでデータベースにレコード追加

    表題のことをしたいのですが、 「HTTPステータス 500 - An exception occurred processing JSP page」という エラー表示がされてしまいます。 名前、会社、住所というテキストボックスに入力して 決定ボタンを押下するとデータベースにレコード追加されるのを 目的としていますが、下記のコードで間違いはありますでしょうか? ----------------------------------------------- <%@ page language="java" %> <%@ page import="java.sql.*"%> <%@ page contentType="text/html; charset=Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); String strName=request.getParameter("name"); String strCompany=request.getParameter("company"); String strAddress=request.getParameter("address"); Class.forName("com.mysql.jdbc.Driver"); String strConn= "jdbc:mysql://localhost/***" + "?user=****&password=****" + "&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn = DriverManager.getConnection(strConn); Statement stmt = conn.createStatement(); String strSql="insert into person (name,company,address) values('"+ strName + "'," + strCompany + "'," + strAddress + ")"; int result= stmt.executeUpdate(strSql); stmt.close(); conn.close(); %> <%//一覧ページにforward%> <jsp:forward page="****.jsp"/> ----------------------------------------------- >int result= stmt.executeUpdate(strSql); の行でエラーが出ているっぽいのですが。。。 TomcatとMySQLを使用しています。 ※環境など情報が不足していましたら、そちらもご指摘ください。  開発勉強中で、まだ理解が足りていない所が多数あります。

    • ベストアンサー
    • Java
  • phpでのmysqlからjsonファイルの変換

    <? php   include("mysql2json.class.php");   //MySQL接続設定 define("DBSV", "PHPSRV"); define("DBNAME", "koukin"); define("DBUSER", "root"); define("DBPASS", "");   //MySQL接続 $conn = mysql_connect(DBSV, DBUSER, DBPASS) or die(); mysql_query("SET NAMES utf8",$conn); mysql_select_db(DBNAME, $conn);   //SQLクエリの発行 $num=0; $sql = "SELECT * FROM komento"; $result = mysql_query($sql, $conn); $num=mysql_affected_rows();   // クラスを呼び出して出力 $objJSON=new mysql2json(); print(trim($objJSON->getJSON($result,$num)));   ?> というプログラムをあるサイトを参考にさせてもらってしようさせてもらっているのですが、なぜか実行すると、getJSON($result,$num))); ?>としか出力されません。 どうしてでしょうか?

    • ベストアンサー
    • PHP
  • テーブルにレコードを追加するサーブレット。

    HTML画面からservletに接続してMYSQLにてつくったデータベースのテーブルに レコードを追加するプログラム(servlet)を作っています。テーブルを表示させるservlet(ext_db5_2_1.java)と、テーブルにレコードを追加して前出のservlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせるservlet(ext_db5_2_2.java)をつくってます。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47, tomcat3.3.1 テーブルにレコードを追加するサーブレット(ext_db5_2_2.java)の問題箇所。 // データベースに追加する値を取得 String number = request.getParameter("number"); String name = new String( request.getParameter("name").getBytes("8859_1"), "JISAutoDetect"); String from_pref =new String( request.getParameter("from_pref").getBytes("8859_1"), "JISAutoDetect"); // SQLを実行して、データベースに追加する StringBuffer buf = new StringBuffer(); buf.append("INSERT INTO OOIWA_SEM ("); buf.append("NUMBER, NAME, FROM_PREF) "); buf.append("VALUES ("); buf.append(number); buf.append(",'"); buf.append(name); buf.append("','"); buf.append(from_pref); buf.append("')"); stmt.executeUpdate(buf.toString()); // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd =                          cx.getRequestDispatcher("/netjv/servlet/shuwa.ext_db5_2_1");

  • PDOで接続をechoするとエラーになる現象の対処

    PDOでPHPとMySQLを連動させる時にエラーが出てしまいます。 対処法を教えて下さい。 サーバーの設定(PHP・MySQLなど)が原因のような気がしていますが、自分では解決できません。 PDOでINSERTを繰り返し行っています。 下記のソースでうまく動作をしています。 しかし、ソースの中で $dbh = new PDO($DSN , $DBUSER , $DBPASS); の後に echo $dbh を入れるとエラーになってしまいます。 このプログラムは複数のレンタルサーバーなどで動作が確認できています。 今回新しくVPSを借りてプログラムを設置したら上記のような現象が出てしまいました。 php.ini , my.cnf , httpd.conf などに設定が必要なのでしょうか? 普通にPHPのプログラムは動くのですが、接続 $dbh をecho したときだけエラーになるのです。 環境 PHP:5.1.6 MySQL:5.0.77 //$DNS,$DBUSER,$DBPASSは別途設定し読み込み。 //$nameには次々に名前が入り、1件ずつDBに登録されていく。 foreach($matches as $match) { $name = $match[1]; try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); //echo $dbh; $query=<<<EOF INSERT INTO sample (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query); $stmt->bindParam(':name', $name); $stmt->execute(); } catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); } }