データの削除
13.6 データの削除
本節ではWebアプリケーションからJDBCを利用し、MySQLデータベースに登録されたデータを削除する方法について学習します。
データを削除するプログラム
入力フォームから必要な情報を入力し、その情報をデータベースから削除します。
実行結果
アプリケーション構成
➢ AccountDao6.java① ソース・フォルダ :web_basic/WEB-INF/src
② パッケージ :ch13
③ 名前 :AccountDao6
package ch13; import java.sql.*; public class AccountDao6 { //接続用の情報をフィールドに定数として定義 private static String RDB_DRIVE = "com.mysql.jdbc.Driver"; private static String URL = "jdbc:mysql://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 delete(String id){ //変数宣言 Connection con = null; Statement smt = null; //return用変数 int count = 0; //SQL文 String sql = "DELETE FROM account WHERE id = '" + id + "'"; 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; } }
➢ deleteForm.jsp① 親フォルダの入力または選択 :web_basic/view/ch13
② ファイル名 :deleteForm.jsp
③ アクセスURL :http://localhost:8080/web_basic/view/ch13/deleteForm.jsp
<%@page contentType="text/html; charset=UTF-8"%> <html> <head> <title>データを削除する</title> </head> <body> <div style="text-align:center"> <h2 style="text-align:center">削除ID入力画面</h2> <hr style="height:3; background-color:#0000ff" /> <br> 削除するIDを入力してください。 <form action="<%=request.getContextPath() %>/DeleteServlet"> <input type="text" name="id"> <input type="submit" value="削除"> </form> <br> </div> </body> </html>
➢ DeleteServlet.java① ソース・フォルダ :web_basic/WEB-INF/src
② パッケージ :ch13
③ 名前 :DeleteServlet
④ スーパークラス :javax.servlet.http.HttpServlet
⑤ アクセスURL :deleteForm.jspからの画面遷移でアクセスされる
package ch13; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DeleteServlet extends HttpServlet{ public void doGet(HttpServletRequest request ,HttpServletResponse response) throws ServletException ,IOException{ String error = ""; try{ //文字エンコーディングの指定 request.setCharacterEncoding("UTF-8"); //パラメータの取得 String id = request.getParameter("id"); //DAOオブジェクト宣言 AccountDao6 objDao6 = new AccountDao6(); //削除メソッドを呼び出し int count = objDao6.delete(id); //削除件数をリクエストスコープに登録 request.setAttribute("count", count); }catch (IllegalStateException e) { error ="DB接続エラーの為、削除できませんでした。"; }catch(Exception e){ error ="予期せぬエラーが発生しました。<br>"+e; }finally{ request.setAttribute("error", error); request.getRequestDispatcher("/view/ch13/deleteReceipt.jsp").forward(request, response); } } }➢ web.xml
<servlet> <servlet-name>DeleteServletMapping</servlet-name> <servlet-class>ch13.DeleteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DeleteServletMapping</servlet-name> <url-pattern>/DeleteServlet</url-pattern> </servlet-mapping>
➢ deleteReceipt.jsp① 親フォルダの入力または選択 :web_basic/view/ch13
② ファイル名 :deleteReceipt.jsp
③ アクセスURL :DeleteServlet.javaからの画面遷移でアクセスされる
<%@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>
解説
今回のデータを削除するプログラムも、13.4節のデータを登録するプログラムや13.5節のデータを更新するプログラムと同様の動きを行っており、異なるのは、情報を入力する画面と表示する画面のレイアウトと、DAOクラスに定義されたメソッドの2点です。
DAOクラスでは、引数に受け取った情報をもとにデータを削除するdelete()メソッドが定義されています。このdelete()メソッドをDeleteServlet.javaで利用することによって、データベースに登録されたデータの削除を行っています。なお、登録や更新と異なり、削除に必要な情報は主キーのIDのみとなります。
insert()メソッドやupdate ()メソッドと同様に、delete()メソッドも削除件数が戻り値として定義されており、戻り値として受け取った削除件数を28行目でリクエストスコープへ登録しています。
登録された削除件数はdeleteReceipt.jspで取得され、画面へ表示されます。
この削除プログラムも、結果画面には削除件数のみが表示されます。データが正しく更新されたかどうかを確認する場合は、13.3.1項で作成した一覧を表示するプログラムを実行してください。
図 13.6.1 データ削除後の一覧表示
このように、JDBCを利用することでWebアプリケーションからでも簡単にデータベースの操作を行うことができます。