【Java】【SQL】ユーザ名更新:入力したIDから、ユーザ名を更新する

■作成するプログラムの概要

・画面にて「ユーザID」および「ユーザ名」を入力する。

・入力したユーザIDからテーブルのユーザ名を更新(Update)する。

・更新が完了した場合、検索画面に遷移する。

■フローチャート

▼全体概要

今回は、赤およびオレンジのオブジェクトについて実装する。

検索処理については、「■参考」を参照。

▼ユーザ更新サーブレットクラスの処理

・GET処理


・POST処理

▼ユーザ更新処理

■プログラム仕様

▼サーブレットクラス(UpdateUserServlet.java)

(1)GET処理

インプット処理内容アウトプット
【URL】
*1
更新画面へ遷移する。

*1:URL(/WEB-INF/jsp/userupdate.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)

▼更新処理(UpdateUserDAO.java)

(1)インスタンス処理

引数:なし
戻り値:new 更新処理クラス

インプット処理内容アウトプット
コードの簡略化を行うため、
インスタンスオブジェクトの生成時、
新規オブジェクトを返却する。
【オブジェクト】
new 更新処理クラス

(2)更新処理

引数:Beanクラス

インプット処理内容アウトプット
【Beanクラス】
ユーザID
ユーザ名
初期値をセットする。
・DB接続=null
・ユーザID=BeanクラスのユーザID
・ユーザ名=Beanクラスのユーザ名
【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ユーザIDNOT NULL主キーCHAR(5)
NAMEユーザ名NOT NULLVARCHAR2(50)

■ユーザ情報テーブルのデータ情報

ユーザ情報テーブルのデータについて、あらかじめ、以下の情報を登録しておく。

IDNAME
11111Hoge
12345Mike
12346Taro
12347Jon
12348Nuncy
12349Hanako

■画面仕様

・ユーザ更新画面

①「ユーザID」および「ユーザ名」を入力し、「更新」ボタンを押下して更新処理を実行する。

なお、入力値の制約は以下の通り。

「ユーザID」:5桁以下で入力必須

「ユーザ名」:入力必須

■サンプルコード

▼サーブレットクラス(UpdateUserServlet.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.UpdateUserDAO;

@WebServlet("/UpdateUserServlet")
public class UpdateUserServlet 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/userupdate.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");
		String input_userName = request.getParameter("username");
		
		try{
			// Beanクラスのインスタンス
			UserInfoBean input_user = new UserInfoBean();
			
			// Beanクラスに入力したユーザIDをセットする
			input_user.setUser_id(input_userID);
			input_user.setUser_name(input_userName);
			
			// 更新処理実行
			UpdateUserDAO.getInstance().UpdateUser(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() {
	}
	
}

▼ユーザ更新処理(UpdateUserDAO.java)

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import bean.UserInfoBean;

public class UpdateUserDAO {
	
	// インスタンスオブジェクトを返却してコード簡略化
	public static UpdateUserDAO getInstance() {
		return new UpdateUserDAO();
	}
	
	public void UpdateUser(UserInfoBean input_user) {
		// 初期値をセット
		Connection db_con = null;
		String id = input_user.getUser_id();
		String name = input_user.getUser_name();
		
		try {
			// jdbcドライバの読み込み(OracleDB)
			Class.forName("oracle.jdbc.driver.OracleDriver");
		
			//  DB接続
			db_con = DriverManager.getConnection(
				"jdbc:oracle:thin:ユーザ名/パスワード@//ホスト名:ポート番号/PDB名");
		
			// 実行するSQL文をセット(空文字)
			String sql = "UPDATE usertbl SET NAME = ? WHERE ID = ?";
			
		
			// DBで実行するSQL文を「prepareStatement」インスタンスに格納する
			PreparedStatement ps = db_con.prepareStatement(sql);

			// 更新するIDと名前をセットする
			ps.setString(1, name);
			ps.setString(2, 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();
					}
			}
		}
	}

}

▼更新画面(userupdate.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="./UpdateUserServlet" method="post">
	<p>
	更新対象のユーザID:<input type="text" name="userid" maxlength="5" required>
	<br>
	更新後のユーザ名:<input type="text" name="username" required required>
	</p>
	<input type="submit" value="更新">
</form>

</body>
</html>

■実行結果

・更新画面

ユーザID:12345
ユーザ名:Hoge


・「更新」ボタンを押下後、検索画面へ遷移


・検索処理を実行すると、先ほどのユーザID「12345」が、ユーザ名「Hoge」で更新されている。

■参考

タイトルとURLをコピーしました