データの削除
13.6 データの削除
本節ではWebアプリケーションからJDBCを利用し、MariaDBデータベースに登録されたデータを削除する方法について学習します。
データを削除するプログラム
入力フォームから必要な情報を入力し、その情報をデータベースから削除します。
実行結果

アプリケーション構成

➢ AccountDao6.java① ソース・フォルダ :web_basic/src/main/java
② パッケージ :ch13
③ 名前 :AccountDao6
package ch13;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class AccountDao6 {
//接続用の情報をフィールドに定数として定義
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 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/src/main/webapp/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/src/main/java
② パッケージ :ch13
③ 名前 :DeleteServlet
④ スーパークラス :jakarta.servlet.http.HttpServlet
⑤ アクセスURL :deleteForm.jspからの画面遷移でアクセスされる
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("/DeleteServlet")
public class DeleteServlet extends HttpServlet{
public void doGet(HttpServletRequest request ,HttpServletResponse response)
throws ServletException ,IOException{
String error = "";
try{
//パラメータの取得
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);
}
}
}
➢ deleteReceipt.jsp① 親フォルダの入力または選択 :web_basic/src/main/webapp/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()メソッドも削除件数が戻り値として定義されており、戻り値として受け取った削除件数を29行目でリクエストスコープへ登録しています。
登録された削除件数はdeleteReceipt.jspで取得され、画面へ表示されます。
この削除プログラムも、結果画面には削除件数のみが表示されます。データが正しく更新されたかどうかを確認する場合は、13.3.1項で作成した一覧を表示するプログラムを実行してください。

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