データの削除

13.6 データの削除

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

データを削除するプログラム

 入力フォームから必要な情報を入力し、その情報をデータベースから削除します。

実行結果

アプリケーション構成

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

➢ AccountDao6.java
1package ch13;
2 
3import java.sql.Connection;
4import java.sql.DriverManager;
5import java.sql.SQLException;
6import java.sql.Statement;
7 
8public class AccountDao6 {
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 delete(String id){
29        //変数宣言
30        Connection con = null;
31        Statement  smt = null;
32  
33        //return用変数
34        int count = 0;
35  
36        //SQL文
37        String sql = "DELETE FROM account WHERE id = '" + id + "'";
38  
39        try{
40            con = getConnection();
41            smt = con.createStatement();
42  
43            //SQLをDBへ発行
44            count = smt.executeUpdate(sql);
45  
46        }catch(Exception e){
47            throw new IllegalStateException(e);
48        }finally{
49            //リソースの開放
50            if(smt != null){
51                try{smt.close();}catch(SQLException ignore){}
52            }
53            if(con != null){
54                try{con.close();}catch(SQLException ignore){}
55            }
56        }
57        return count;
58    }
59 }

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

➢ deleteForm.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">削除ID入力画面</h2>
10            <hr style="height:3; background-color:#0000ff" />
11            <br>
12            削除するIDを入力してください。
13            <form action="<%=request.getContextPath() %>/DeleteServlet">
14                <input type="text" name="id">
15                <input type="submit" value="削除">
16            </form>
17            <br>
18        </div>
19    </body>
20 </html>

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

➢ DeleteServlet.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("/DeleteServlet")
12public class DeleteServlet extends HttpServlet{
13    public void doGet(HttpServletRequest request ,HttpServletResponse response)
14            throws ServletException ,IOException{
15  
16        String error = "";
17  
18        try{
19            //パラメータの取得
20            String id = request.getParameter("id");
21  
22            //DAOオブジェクト宣言
23            AccountDao6 objDao6 = new AccountDao6();
24  
25            //削除メソッドを呼び出し
26            int count = objDao6.delete(id);
27  
28            //削除件数をリクエストスコープに登録
29            request.setAttribute("count", count);
30  
31        }catch (IllegalStateException e) {
32            error ="DB接続エラーの為、削除できませんでした。";
33  
34        }catch(Exception e){
35            error ="予期せぬエラーが発生しました。<br>"+e;
36  
37        }finally{
38            request.setAttribute("error", error);
39            request.getRequestDispatcher("/view/ch13/deleteReceipt.jsp").forward(request, response);
40        }
41    }
42 }

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

➢ deleteReceipt.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">削除結果画面</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>

解説
 今回のデータを削除するプログラムも、13.4節のデータを登録するプログラムや13.5節のデータを更新するプログラムと同様の動きを行っており、異なるのは、情報を入力する画面と表示する画面のレイアウトと、DAOクラスに定義されたメソッドの2点です。

 DAOクラスでは、引数に受け取った情報をもとにデータを削除するdelete()メソッドが定義されています。このdelete()メソッドをDeleteServlet.javaで利用することによって、データベースに登録されたデータの削除を行っています。なお、登録や更新と異なり、削除に必要な情報は主キーのIDのみとなります。
   26:int count = objDao6.delete(id);

 insert()メソッドやupdate ()メソッドと同様に、delete()メソッドも削除件数が戻り値として定義されており、戻り値として受け取った削除件数を29行目でリクエストスコープへ登録しています。
   29:request.setAttribute("count", count);

 登録された削除件数はdeleteReceipt.jspで取得され、画面へ表示されます。
   19:<%= count%>件のデータを削除しました。

 この削除プログラムも、結果画面には削除件数のみが表示されます。データが正しく更新されたかどうかを確認する場合は、13.3.1項で作成した一覧を表示するプログラムを実行してください。

図 13.6.1 データ削除後の一覧表示

 このように、JDBCを利用することでWebアプリケーションからでも簡単にデータベースの操作を行うことができます。


NEXT>> 13.7 本章のまとめ

f