🙆

存在チェック

2023/05/18に公開

開発環境

エクリプス
JSP
Tomcat

DB接続する際に、フォームに値が入っていた時だけその値はDBに存在するのかのチェックをする

研修資料からの引用

このログイン画面には、必須チェックが実装済みでした。必須チェックはデータベースを必要としないので、データベースへの接続は設定されていません。
このログイン画面に存在チェックを追加します。存在チェックは、入力されたデータがデータベースに存在するかどうかのチェックなので当然データベースへの接続が必要になります。

LoginBean.java

LoginBean.java
try {
//先にこっちを書く
//書いたら、右クリックで[try/マルチキャッチで囲む]を選ぶ
Driver.class.getDeclaredConstructor().newInstance();
		} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
				| NoSuchMethodException | SecurityException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
全文
LoginBean.java
public boolean check() throws SQLException {
		//必須
		if(id == "" || pass == "") {
			msg = "ID,パスワードは必須入力項目です。";
			return false;
		}
		//存在チェック
		//JDBCドライバ

			try {
				Driver.class.getDeclaredConstructor().newInstance();
				Connection con = DriverManager.getConnection(
						"jdbc:mysql://192.168.33.10/yakuzo2",
						"java",
						"HogeHoge123#"
						);
				/*
				 * StringBuilderは条件によって文字列をどこまで連結させるか決められるから便利
				 */
				StringBuilder sql = new StringBuilder();
				//つながることを想定して、SQLの空白を忘れないように!
				sql.append("select count(*) as cnt ");
				sql.append("from mst_shain ");
				sql.append("where  ");
				sql.append("shain_code = ? ");
				sql.append("and password = ? ");
				sql.append("and login_flg = '0' ");
				sql.append("and delete_flg = '0'");
				
				//直接文字列を入れない手法をエスケープという
				PreparedStatement ps = con.prepareStatement(sql.toString());
				
				//パラメータのセット 1つめの?にid 2つめの?にpass
				ps.setString(1, id);
				ps.setString(2, pass);
				
				//実行
				ResultSet rs = ps.executeQuery();
				//nextメソッド:次の行へ移動
				rs.next();
				
				int count = rs.getInt("cnt");
				// DBへの接続は、役割が終わったら終了して切断 接続したままだとパフォーマンス力が落ち、システムダウンすることも。
				rs.close();
				ps.close();
				con.close();
				
				if(count == 0) {
					msg = "このID、パスワードの組み合わせで有効なユーザは存在しません。";
					return false;
				}
			} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
					| InvocationTargetException | NoSuchMethodException | SecurityException e1) {
				// TODO 自動生成された catch ブロック
				e1.printStackTrace();
			}
		
		
		return true;
	}

Discussion