データの更新
この節では、テーブルのデータを更新する方法を見てみましょう。
○ ファイル
データを入力するHtmlファイルを作成します。プロジェクトに次のようなファイルを追加してください。
サンプルダウンロード
○ プログラム
次のようにプログラムを入力してください。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>登録データ入力</title>
- </head>
- <body>
- <form action="inserttest" method="POST">
- <h2>usersテーブルに登録するデータ</h2>
- ユーザーID:<input type="text" name="userid"><br>
- ユーザー名:<input type="text" name="username"><br>
- パスワード:<input type="password" name="password"><br>
- 氏名:<input type="text" name="namae"><br>
- <input type="submit" value="送信">
- <input type="reset" value="リセット">
- </form>
- </body>
- </html>
○ ファイル
入力したデータをデータベースに追加するプログラムを作成しましょう。プロジェクトに次のようなServletを追加してください。
パッケージ名 |
test.servlet |
クラス名 |
InsertTest |
スーパークラス名 |
javax.servlet.http.HttpServlet |
サンプルダウンロード
○ プログラム
doPostメソッドを追加して、次のようにプログラムを入力してください。
- package test.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.Statement;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class InsertTest extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //クライアントに出力する準備
- resp.setContentType("text/html; charset=utf-8");
- PrintWriter pw = resp.getWriter();
- //送信されたデータを取得
- String userid = req.getParameter("userid");
- String username = req.getParameter("username");
- String password = req.getParameter("password");
- String namae = req.getParameter("namae");
- //受信したデータをUTF-8に変換
- userid = new String(userid.getBytes("8859_1"), "UTF-8");
- username = new String(username.getBytes("8859_1"), "UTF-8");
- password = new String(password.getBytes("8859_1"), "UTF-8");
- namae = new String(namae.getBytes("8859_1"), "UTF-8");
- String message = null;
- Connection con = null;
- try{
- //JDBCドライバクラスの指定
- String drivername = "com.mysql.jdbc.Driver";
- //データベースを指定
- String url = "jdbc:mysql://localhost:3306/books?characterEncoding=utf8";
- //ユーザー名
- String user = "root";
- //パスワード
- String pass = "";
- //指定したドライバクラスを読み込み
- Class.forName(drivername);
- //データベースに接続
- con = DriverManager.getConnection(url, user, pass);
- //パラメータ化されたSQL文を生成
- StringBuilder sql = new StringBuilder();
- sql.append("INSERT INTO ");
- sql.append(" users ");
- sql.append("VALUES ");
- sql.append("(?,?,?,?)");
- //PreparedStatementオブジェクトを生成
- PreparedStatement pst = con.prepareStatement(sql.toString());
- //パラメータをセット
- pst.setString(1, userid);
- pst.setString(2, username);
- pst.setString(3, password);
- pst.setString(4, namae);
- //SQL文を実行
- int ret = pst.executeUpdate();
- //Statementオブジェクトを切断
- pst.close();
- if(ret != 0){
- message = "登録しました。";
- }else{
- message = "登録に失敗しました。";
- }
- }catch(Exception e){
- //エラーメッセージをセット
- message = "データベースに接続できませんでした。";
- }finally{
- try{
- //データベースに接続されていれば切断する
- if(con != null){
- con.close();
- }
- }catch(Exception e){
- message = "エラーが発生しました。";
- }
- }
- //クライアントにHtmlタグを書き出し
- pw.println("<html>");
- pw.println("<head>");
- pw.println("<title>データベースに接続する</title>");
- pw.println("</head>");
- pw.println("<body>");
- pw.println(message);
- pw.println("<br>");
- pw.println("<a href=\"/WebApp/SelectTest.jsp\">一覧へ</a>");
- pw.println("</body>");
- pw.println("</html>");
- }
- }
〇 Webアプリケーション設定ファイルの編集
web.xmlに次の内容を追加してください。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1">
(そのほかの記述…)
- <servlet>
- <servlet-name>InsertTest</servlet-name>
- <servlet-class>test.servlet.InsertTest</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>InsertTest</servlet-name>
- <url-pattern>/inserttest</url-pattern>
- </servlet-mapping>
○ 実行結果
http://localhost:8080/WebApp/InsertTest.html
実行結果
○ 解説
今回は、InsertTest.htmlでデータを入力して、InsertTest.javaを呼び出して、テーブルにデータを追加します。
テーブルにデータを追加するには「INSERT」文を使います。今回は、パラメータを指定したSQL文を使用しているため、68~71行目でパラメータにデータをセットしています。テーブルを更新するSQL文を実行する場合はPreparedStatemenインタフェースのexecuteUpdateメソッドを使用します。
前へ