■作成するプログラムの概要
・画面にて「ユーザID」を入力する。
・入力したユーザIDからテーブルのユーザを物理削除(Delete)する。
・削除が完了した場合、検索画面に遷移する。
■フローチャート
▼全体概要
今回は、赤およびオレンジのオブジェクトについて実装する。
検索処理については、「■参考」を参照。
▼ユーザ削除サーブレットクラス
・GET処理
・POST処理
▼ユーザ削除処理
■プログラム仕様
▼ユーザ削除サーブレットクラス(DeleteUserServlet.java)
(1)GET処理
インプット | 処理内容 | アウトプット |
---|---|---|
【URL】 *1 | 削除画面へ遷移する。 | – |
*1:URL(/WEB-INF/jsp/userdelete.jsp)
(2)POST処理
インプット | 処理内容 | アウトプット |
---|---|---|
【フォーム情報】 ユーザID | 【フォーム情報】を取得する。 | – |
– | 【try】 | – |
– | Beanクラスをインスタンスする。 | – |
– | Beanクラスに入力したユーザIDをセットする。 | – |
– | ユーザ削除処理を実行する。 | – |
【URL】 *1 | 検索画面へ遷移する。 | – |
– | 【catch】 | – |
【URL】 *2 | 何らかの理由で失敗した場合、 エラーページにエラー文を渡して表示する。 | 【メッセージ】 エラーメッセージ |
*1:URL(/WEB-INF/jsp/usersearch.jsp)
*2:URL(/WEB-INF/jsp/error.jsp)
▼削除処理(DeleteUserDAO.java)
(1)インスタンス処理
引数:なし
戻り値:new 削除処理クラス
インプット | 処理内容 | アウトプット |
---|---|---|
– | コードの簡略化を行うため、 インスタンスオブジェクトの生成時、 新規オブジェクトを返却する。 | 【オブジェクト】 new 削除処理クラス |
(2)削除処理
引数:Beanクラス
インプット | 処理内容 | アウトプット |
---|---|---|
【Beanクラス】 ユーザID | 初期値をセットする。 ・DB接続=null ・ユーザID=BeanクラスのユーザID | – |
– | 【try】 | – |
– | jdbcドライバを読み込む。(OracleDB)(*1) | – |
【DB情報】 ユーザ名 パスワード PDB情報 | DBへ接続する。(*2) | – |
– | 実行するSQL文をセットする。 | – |
– | SQLを実行する。 | – |
– | 【catch】sql実行失敗 | – |
– | エラーメッセージをコンソールに出力する。 | 【メッセージ】 エラーメッセージ |
– | 【catch】JDBCドライバ関連エラー | – |
– | エラーメッセージをコンソールに出力する。 | 【メッセージ】 エラーメッセージ |
– | 【finally】 | – |
– | 【条件分岐】 ▼DB接続中の場合 DBとの接続を切る。 | – |
(*1)jdbcドライバを読み込む。
以下のようにドライバ(ojdbc10.jar)を配置する。
なお、ドライバ(ojdbc10.jar)は、Oracle19cのものを使用する。(Oracle社からダウンロードしたもの)
(*2)DBへ接続する
DBへの接続は、以下の2通りのうち、Thin接続にて行う。
・Thin接続
jdbc:oracle:thin:<ユーザ名>/<パスワード>@//<ホスト名:ポート番号>/<PDB名>
・OCI接続(クライアント側にオラクルクライアントをインストールする必要あり)
jdbc:oracle:oci:<ユーザ名>/<パスワード>@<サービス名またはPDB名>
■テーブル定義
ユーザ情報テーブルの定義情報を以下に示す。
カラム名(物理) | カラム名(論理) | Null判定 | キー | 型 |
---|---|---|---|---|
ID | ユーザID | NOT NULL | 主キー | CHAR(5) |
NAME | ユーザ名 | NOT NULL | – | VARCHAR2(50) |
■ユーザ情報テーブルのデータ情報
ユーザ情報テーブルのデータについて、あらかじめ、以下の情報を登録しておく。
ID | NAME |
---|---|
11111 | Hoge |
12345 | Mike |
12346 | Taro |
12347 | Jon |
12348 | Nuncy |
12349 | Hanako |
■画面仕様
削除対象ユーザIDを入力できるフォームを作成し、「削除」ボタン押下時、削除処理を実行する。
※ユーザID:5桁以下で入力必須
■サンプルコード
▼サーブレットクラス(DeleteUserServlet.java)
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.UserInfoBean;
import dao.DeleteUserDAO;
/**
* Servlet implementation class DeleteUserServlet
*/
@WebServlet("/DeleteUserServlet")
public class DeleteUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 画面へ遷移(Getの場合は削除画面へ)
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/userdelete.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Jspのフォーム画面から削除対象ユーザIDを取得
request.setCharacterEncoding("UTF-8");
String input_userID = request.getParameter("userid");
try{
// Beanクラスのインスタンス
UserInfoBean input_user = new UserInfoBean();
// Beanクラスに入力したユーザIDをセットする
input_user.setUser_id(input_userID);
// 削除処理実行
DeleteUserDAO.getInstance().DeleteUser(input_user);
// 更新処理が問題なく完了した場合は検索画面のJSPに遷移する
request.getRequestDispatcher("/WEB-INF/jsp/usersearch.jsp").forward(request, response);
}catch(Exception e){
//何らかの理由で失敗したらエラーページにエラー文を渡して表示。
request.setAttribute("error", e.getMessage());
request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request, response);
}
}
}
▼Beanクラス(UserInfoBean.java)
Beanクラスは「■参考」のユーザ検索処理のものを使用する。
package bean;
import java.io.Serializable;
public class UserInfoBean implements Serializable{
// フィールド
private String user_id;
private String user_name;
// ユーザIDのゲッター/セッターを作成
public String getUser_id() {
return user_id;
}
public void setUser_id(String id) {
this.user_id = id;
}
// ユーザ名のゲッター/セッターを作成
public String getUser_name() {
return user_name;
}
public void setUser_name(String name) {
this.user_name = name;
}
// コンストラクタ:設定なし
public UserInfoBean() {
}
}
▼ユーザ削除処理(DeleteUserDAO.java)
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import bean.UserInfoBean;
public class DeleteUserDAO {
// インスタンスオブジェクトを返却してコード簡略化
public static DeleteUserDAO getInstance() {
return new DeleteUserDAO();
}
public void DeleteUser(UserInfoBean input_user) {
// 初期値をセット
Connection db_con = null;
String id = input_user.getUser_id();
try {
// jdbcドライバの読み込み(OracleDB)
Class.forName("oracle.jdbc.driver.OracleDriver");
// DB接続
db_con = DriverManager.getConnection(
"jdbc:oracle:thin:ユーザ名/パスワード@//ホスト名:ポート番号/PDB名");
// 実行するSQL文をセット
String sql = "DELETE FROM usertbl WHERE ID = ?";
// DBで実行するSQL文を「prepareStatement」インスタンスに格納する
PreparedStatement ps = db_con.prepareStatement(sql);
// 登録するIDと名前をセットする
ps.setString(1, id);
// SQL実行
ps.executeUpdate();
} catch(SQLException sql_e) {
// エラーハンドリング
System.out.println("sql実行失敗");
sql_e.printStackTrace();
} catch(ClassNotFoundException e) {
// エラーハンドリング
System.out.println("JDBCドライバ関連エラー");
e.printStackTrace();
} finally {
// DB接続を解除
if (db_con != null) {
try {
db_con.close();
} catch (SQLException e) {
System.out.println("sqlクローズ失敗");
e.printStackTrace();
}
}
}
}
}
▼削除画面(userdelete.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ユーザ削除画面</title>
</head>
<body>
<form action="./DeleteUserServlet" method="post">
<p>
削除対象のユーザID:<input type="text" name="userid" maxlength="5" required>
</p>
<input type="submit" value="削除">
</form>
</body>
</html>
■実行結果
・事前確認(検索画面)
今回はユーザID「11111」のユーザを削除する。
・削除画面
ユーザIDに「11111」を入力し、「削除」ボタンを押下する。
・事後確認(検索画面)
ユーザID「11111」が削除されていることを確認。
コメント