データの更新

 この節では、テーブルのデータを更新する方法を見てみましょう。

○ ファイル

 データを入力するHtmlファイルを作成します。プロジェクトに次のようなファイルを追加してください。

ファイル名 InsertTest.html

サンプルダウンロード

 

○ プログラム

 次のようにプログラムを入力してください。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>登録データ入力</title>
  6. </head>
  7. <body>
  8.  <form action="inserttest" method="POST">
  9.   <h2>usersテーブルに登録するデータ</h2>
  10.   ユーザーID:<input type="text" name="userid"><br>
  11.   ユーザー名:<input type="text" name="username"><br>
  12.   パスワード:<input type="password" name="password"><br>
  13.   氏名:<input type="text" name="namae"><br>
  14.   <input type="submit" value="送信">
  15.   <input type="reset" value="リセット">
  16.  </form>
  17. </body>
  18. </html>

○ ファイル

 入力したデータをデータベースに追加するプログラムを作成しましょう。プロジェクトに次のようなServletを追加してください。

パッケージ名 test.servlet
クラス名 InsertTest
スーパークラス名 javax.servlet.http.HttpServlet

サンプルダウンロード

○ プログラム

 doPostメソッドを追加して、次のようにプログラムを入力してください。

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.PreparedStatement;
  7. import java.sql.Statement;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. public class InsertTest extends HttpServlet {
  13.  @Override
  14.  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15.   //クライアントに出力する準備
  16.   resp.setContentType("text/html; charset=utf-8");
  17.   PrintWriter pw = resp.getWriter();
  18.   //送信されたデータを取得
  19.   String userid = req.getParameter("userid");
  20.   String username = req.getParameter("username");
  21.   String password = req.getParameter("password");
  22.   String namae = req.getParameter("namae");
  23.   //受信したデータをUTF-8に変換
  24.   userid = new String(userid.getBytes("8859_1"), "UTF-8");
  25.   username = new String(username.getBytes("8859_1"), "UTF-8");
  26.   password = new String(password.getBytes("8859_1"), "UTF-8");
  27.   namae = new String(namae.getBytes("8859_1"), "UTF-8");
  28.   String message = null;
  29.   Connection con = null;
  30.   try{
  31.    //JDBCドライバクラスの指定
  32.    String drivername = "com.mysql.jdbc.Driver";
  33.    //データベースを指定
  34.    String url = "jdbc:mysql://localhost:3306/books?characterEncoding=utf8";
  35.    //ユーザー名
  36.    String user = "root";
  37.    //パスワード
  38.    String pass = "";
  39.    //指定したドライバクラスを読み込み
  40.    Class.forName(drivername);
  41.    //データベースに接続
  42.    con = DriverManager.getConnection(url, user, pass);
  43.    //ステートメントオブジェクトを取得
  44.    Statement st = con.createStatement();
  45.    //パラメータ化されたSQL文を生成
  46.    StringBuilder sql = new StringBuilder();
  47.    sql.append("INSERT INTO ");
  48.    sql.append(" users ");
  49.    sql.append("VALUES ");
  50.    sql.append("(?,?,?,?)");
  51.    //PreparedStatementオブジェクトを生成
  52.    PreparedStatement pst = con.prepareStatement(sql.toString());
  53.    //パラメータをセット
  54.    pst.setString(1, userid);
  55.    pst.setString(2, username);
  56.    pst.setString(3, password);
  57.    pst.setString(4, namae);
  58.     //SQL文を実行
  59.    int ret = pst.executeUpdate();
  60.     //Statementオブジェクトを切断
  61.    pst.close();
  62.    if(ret != 0){
  63.     message = "登録しました。";
  64.    }else{
  65.     message = "登録に失敗しました。";
  66.    }
  67.   }catch(Exception e){
  68.    //エラーメッセージをセット
  69.    message = "データベースに接続できませんでした。";
  70.   }finally{
  71.    try{
  72.     //データベースに接続されていれば切断する
  73.     if(con != null){
  74.      con.close();
  75.     }
  76.    }catch(Exception e){
  77.     message = "エラーが発生しました。";
  78.    }
  79.   }
  80.   //クライアントにHtmlタグを書き出し
  81.   pw.println("<html>");
  82.   pw.println("<head>");
  83.   pw.println("<title>データベースに接続する</title>");
  84.   pw.println("</head>");
  85.   pw.println("<body>");
  86.   pw.println(message);
  87.   pw.println("<br>");
  88.   pw.println("<a href=\"/WebApp/SelectTest.jsp\">一覧へ</a>");
  89.   pw.println("</body>");
  90.   pw.println("</html>");
  91.  }
  92. }

〇 Webアプリケーション設定ファイルの編集

 web.xmlに次の内容を追加してください。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6.   version="3.1">
(そのほかの記述…)
  1.  <servlet>
  2.   <servlet-name>InsertTest</servlet-name>
  3.   <servlet-class>test.servlet.InsertTest</servlet-class>
  4.  </servlet>
  5.  <servlet-mapping>
  6.   <servlet-name>InsertTest</servlet-name>
  7.   <url-pattern>/inserttest</url-pattern>
  8.  </servlet-mapping>

○ 実行結果

http://localhost:8080/WebApp/InsertTest.html

実行結果
実行結果

○ 解説

 今回は、InsertTest.htmlでデータを入力して、InsertTest.javaを呼び出して、テーブルにデータを追加します。

 テーブルにデータを追加するには「INSERT」文を使います。今回は、パラメータを指定したSQL文を使用しているため、71~74行目でパラメータにデータをセットしています。テーブルを更新するSQL文を実行する場合はStatemenインタフェースのexecuteUpdateメソッドを使用します。

前へ