データの削除

13.5 データの削除

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

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

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

実行結果

アプリケーション構成

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

➢ AccountDao6.java
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;
 	}
 }

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

➢ 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>

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

➢ DeleteServlet.java
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
DeleteServletMapping ch13.DeleteServlet DeleteServletMapping /DeleteServlet [/html]

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

➢ deleteReceipt.jsp
<%@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のみとなります。
   25:int count = objDao6.delete(id);

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

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

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

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

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


NEXT>> 13.7 本章のまとめ