データの登録

13.4 データの登録

 本節では、WebアプリケーションからJDBCを利用してMariaDBデータベースへデータを登録する方法について学習します。

データを登録するプログラム

 入力フォームから登録する一連の情報を入力し、その情報をJDBCを利用してデータベースへ登録します。

実行結果

アプリケーション構成

① ソース・フォルダ :web_basic/src/main/java
② パッケージ :ch13
③ 名前 :AccountDao4

➢ AccountDao4.java
1package ch13;
2 
3import java.sql.Connection;
4import java.sql.DriverManager;
5import java.sql.SQLException;
6import java.sql.Statement;
7 
8public class AccountDao4 {
9 
10    //接続用の情報をフィールドに定数として定義
11    private static String RDB_DRIVE = "org.mariadb.jdbc.Driver";
12    private static String URL = "jdbc:mariadb://localhost/accountdb";
13    private static String USER = "root";
14    private static String PASS = "root123";
15  
16    //データベース接続を行うメソッド
17    public static Connection getConnection(){
18        try{
19            Class.forName(RDB_DRIVE);
20            Connection con = DriverManager.getConnection(URL, USER, PASS);
21            return con;
22        }catch(Exception e){
23            throw new IllegalStateException(e);
24        }
25    }
26  
27    //データベースへデータを登録するメソッド
28    public int insert(AccountInfo accountinfo){
29        //変数宣言
30        Connection con = null;
31        Statement  smt = null;
32  
33        //return用変数
34        int count = 0;
35  
36        //SQL文
37        String sql = "INSERT INTO account VALUES('"
38                    + accountinfo.getId() + "','"
39                    + accountinfo.getName() + "','"
40                    + accountinfo.getEmail() + "','"
41                    + accountinfo.getAuthority() + "')";
42  
43        try{
44            con = getConnection();
45            smt = con.createStatement();
46  
47            //SQLをDBへ発行
48            count = smt.executeUpdate(sql);
49  
50        }catch(Exception e){
51            throw new IllegalStateException(e);
52        }finally{
53            //リソースの開放
54            if(smt != null){
55                try{smt.close();}catch(SQLException ignore){}
56            }
57            if(con != null){
58                try{con.close();}catch(SQLException ignore){}
59            }
60        }
61        return count;
62    }
63 }

① 親フォルダの入力または選択 :web_basic/src/main/webapp/view/ch13
② ファイル名 :insertForm.jsp
③ アクセスURL :http://localhost:8080/web_basic/view/ch13/insertForm.jsp

➢ insertForm.jsp
1<%@page contentType="text/html; charset=UTF-8"%>
2 
3<html>
4    <head>
5        <title>データを登録する</title>
6    </head>
7    <body>
8        <div style="text-align:center">
9            <h2 style="text-align:center">登録データ入力画面</h2>
10            <hr style="height:3; background-color:#0000ff" />
11            <br>
12            登録する情報を入力してください。
13            <form action="<%=request.getContextPath() %>/InsertServlet">
14                <table style="margin:0 auto">
15                    <tr>
16                        <td style="width:60">ID</td>
17                        <td ><input type=text size="30" name="id"></input></td>
18                    </tr>
19                    <tr>
20                        <td style="width:60">名前</td>
21                        <td ><input type=text size="30" name="name"></input></td>
22                    </tr>
23                    <tr>
24                        <td style="width:70">アドレス</td>
25                        <td ><input type=text size="30" name="email"></input></td>
26                    </tr>
27                    <tr>
28                        <td style="width:60">権限</td>
29                        <td >
30                            <select name="authority">
31                                <option value="管理者">管理者</option>
32                                <option value="一般">一般</option>
33                            </select>
34                        </td>
35                    </tr>
36                    <tr>
37                        <td colspan=2 style="text-align:center">
38                            <input type="submit" value="登録">
39                        </td>
40                    </tr>
41                </table>
42            </form>
43            <br>
44        </div>
45    </body>
46 </html>

① ソース・フォルダ :web_basic/src/main/java
② パッケージ :ch13
③ 名前 :InsertServlet
④ スーパークラス :jakarta.servlet.http.HttpServlet
⑤ アクセスURL :insertForm.jspからの画面遷移でアクセスされる

➢ InsertServlet.java
1package ch13;
2 
3import java.io.IOException;
4 
5import jakarta.servlet.ServletException;
6import jakarta.servlet.annotation.WebServlet;
7import jakarta.servlet.http.HttpServlet;
8import jakarta.servlet.http.HttpServletRequest;
9import jakarta.servlet.http.HttpServletResponse;
10 
11@WebServlet("/InsertServlet")
12public class InsertServlet extends HttpServlet{
13    public void doGet(HttpServletRequest request ,HttpServletResponse response)
14            throws ServletException ,IOException{
15  
16        String error = "";
17  
18        try{
19            //文字エンコーディングの指定
20            request.setCharacterEncoding("UTF-8");
21  
22            //DTOオブジェクト宣言
23            AccountInfo accountinfo = new AccountInfo();
24  
25            //パラメータの取得
26            accountinfo.setId(request.getParameter("id"));
27            accountinfo.setName(request.getParameter("name"));
28            accountinfo.setEmail(request.getParameter("email"));
29            accountinfo.setAuthority(request.getParameter("authority"));
30  
31            //DAOオブジェクト宣言
32            AccountDao4 objDao4 = new AccountDao4();
33  
34            //1件登録メソッドを呼び出し
35            int count = objDao4.insert(accountinfo);
36  
37            //登録された件数を持ってinsertReceipt.jspにフォワード
38            request.setAttribute("count", count);
39  
40        }catch (IllegalStateException e) {
41            error ="DB接続エラーの為、登録できませんでした。";
42  
43        }catch(Exception e){
44            error ="予期せぬエラーが発生しました。<br>"+e;
45  
46        }finally{
47            request.setAttribute("error", error);
48            request.getRequestDispatcher("/view/ch13/insertReceipt.jsp").forward(request, response);
49        }
50    }
51 }

① 親フォルダの入力または選択 :web_basic/src/main/webapp/view/ch13
② ファイル名 :insertReceipt.jsp
③ アクセスURL :InsertServlet.javaからの画面遷移でアクセスされる

➢ insertReceipt.jsp
1<%@page contentType="text/html; charset=UTF-8"%>
2 
3<%
4Integer count = (Integer)request.getAttribute("count");
5String error = (String)request.getAttribute("error");
6%>
7 
8<html>
9    <head>
10        <title>データを登録する</title>
11    </head>
12    <body>
13        <div style="text-align:center">
14            <h2 style="text-align:center">検索ID入力画面</h2>
15            <hr style="height:3; background-color:#0000ff" />
16            <br>
17            <%= error %>
18            <% if(count != null){ %>
19                <%= count%>件のデータを登録しました。
20            <% } %>
21            <br>
22        </div>
23    </body>
24 </html>

解説
 今回のプログラムでは、登録情報を入力するinsertForm.jspから入力されたデータをInsertServlet.java内の23行目から26行目で受け取り、アカウント情報を管理するオブジェクトへセットします。
   23:accountinfo.setId(request.getParameter("id"));
   24:accountinfo.setName(request.getParameter("name"));
   25:accountinfo.setEmail(request.getParameter("email"));
   26:accountinfo.setAuthority(request.getParameter("authority"));

 その後、32行目でDAOクラス内に定義されたinsert()メソッドにアカウント情報を管理するオブジェクトを渡し、データベースへ登録を行います。
   32:int count = objDao4.insert(accountinfo);

 insert()メソッドは登録件数が戻り値として定義されており、戻り値として受け取った登録件数を34行目でリクエストスコープへ登録しています。

 insertReceipt.jspではリクエストスコープへ登録された件数を取得し、画面へ表示しています。
   19:<%= count%>件のデータを登録しました。

 今回のプログラムでは、登録された件数のみが表示されるため、データが正しく登録されたかどうかを確認することができません。データを確認したい場合は、13.3.1項で作成した一覧を表示するプログラムを実行してください。

図 13.4.1 データ登録後の一覧表示

 次の節では、簡単なデータを更新するWebアプリケーションを作成しデータの更新方法を学習します。

データ登録時の注意点

 MySQLに作成したaccountテーブルは、IDの情報が主キーとして設定されています。そのため、データを登録する場合はIDが重複しないように注意する必要があります。
 誤って重複したIDで登録を行うと、以下のようにエラーが発生します。


NEXT>> 13.5 データの更新

f