データの登録

13.4 データの登録

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

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

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

実行結果

アプリケーション構成

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

➢ AccountDao4.java
[html] package ch13; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class AccountDao4 { //接続用の情報をフィールドに定数として定義 private static String RDB_DRIVE = “org.mariadb.jdbc.Driver”; private static String URL = “jdbc:mariadb://localhost/accountdb”; private static String USER = “root”; private static String PASS = “root123”; //データベース接続を行うメソッド public static Connection getConnection(){ try{ Class.forName(RDB_DRIVE); Connection con = DriverManager.getConnection(URL, USER, PASS); return con; }catch(Exception e){ throw new IllegalStateException(e); } } //データベースへデータを登録するメソッド public int insert(AccountInfo accountinfo){ //変数宣言 Connection con = null; Statement smt = null; //return用変数 int count = 0; //SQL文 String sql = “INSERT INTO account VALUES(‘” + accountinfo.getId() + “‘,'” + accountinfo.getName() + “‘,'” + accountinfo.getEmail() + “‘,'” + accountinfo.getAuthority() + “‘)”; try{ con = getConnection(); smt = con.createStatement(); //SQLをDBへ発行 count = smt.executeUpdate(sql); }catch(Exception e){ throw new IllegalStateException(e); }finally{ //リソースの開放 if(smt != null){ try{smt.close();}catch(SQLException ignore){} } if(con != null){ try{con.close();}catch(SQLException ignore){} } } return count; } } [/html]

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

➢ insertForm.jsp
[html] <%@page contentType=”text/html; charset=UTF-8″%> <html> <head> <title>データを登録する</title> </head> <body> <div style=”text-align:center”> <h2 style=”text-align:center”>登録データ入力画面</h2> <hr style=”height:3; background-color:#0000ff” /> <br> 登録する情報を入力してください。 <form action=”<%=request.getContextPath() %>/InsertServlet”> <table style=”margin:0 auto”> <tr> <td style=”width:60″>ID</td> <td ><input type=”text” size=”30″ name=”id”></td> </tr> <tr> <td style=”width:60″>名前</td> <td ><input type=”text” size=”30″ name=”name”></td> </tr> <tr> <td style=”width:70″>アドレス</td> <td ><input type=”text” size=”30″ name=”email”></td> </tr> <tr> <td style=”width:60″>権限</td> <td > <select name=”authority”> <option value=”管理者”>管理者</option> <option value=”一般”>一般</option> </select> </td> </tr> <tr> <td colspan=2 style=”text-align:center”> <input type=”submit” value=”登録”> </td> </tr> </table> </form> <br> </div> </body> </html> [/html]

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

➢ InsertServlet.java
[html] package ch13; import java.io.IOException; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet(“/InsertServlet”) public class InsertServlet extends HttpServlet{ public void doGet(HttpServletRequest request ,HttpServletResponse response) throws ServletException ,IOException{ String error = “”; try{ //文字エンコーディングの指定 request.setCharacterEncoding(“UTF-8”); //DTOオブジェクト宣言 AccountInfo accountinfo = new AccountInfo(); //パラメータの取得 accountinfo.setId(request.getParameter(“id”)); accountinfo.setName(request.getParameter(“name”)); accountinfo.setEmail(request.getParameter(“email”)); accountinfo.setAuthority(request.getParameter(“authority”)); //DAOオブジェクト宣言 AccountDao4 objDao4 = new AccountDao4(); //1件登録メソッドを呼び出し int count = objDao4.insert(accountinfo); //登録された件数を持ってinsertReceipt.jspにフォワード request.setAttribute(“count”, count); }catch (IllegalStateException e) { error =”DB接続エラーの為、登録できませんでした。”; }catch(Exception e){ error =”予期せぬエラーが発生しました。<br>”+e; }finally{ request.setAttribute(“error”, error); request.getRequestDispatcher(“/view/ch13/insertReceipt.jsp”).forward(request, response); } } } [/html]

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

➢ insertReceipt.jsp
[html] <%@page contentType=”text/html; charset=UTF-8″%> <% Integer count = (Integer)request.getAttribute(“count”); String error = (String)request.getAttribute(“error”); %> <html> <head> <title>データを登録する</title> </head> <body> <div style=”text-align:center”> <h2 style=”text-align:center”>登録結果画面</h2> <hr style=”height:3; background-color:#0000ff” /> <br> <%= error %> <% if(count != null){ %> <%= count%>件のデータを登録しました。 <% } %> <br> </div> </body> </html> [/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 データの更新