๐ŸŒฑ[๊ตฌ๋””์•„์นด๋ฐ๋ฏธ IT๊ตญ๋น„์ง€์›]

๊น€ํฌ์ง„ยท2023๋…„ 4์›” 30์ผ
0

[๊ตฌ๋””์•„์นด๋ฐ๋ฏธ IT๊ตญ๋น„์ง€์›] ๋™์ผํ•œ name์˜ ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” request.getParameterValues()์™€ ์ด ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๋™์ ์ฟผ๋ฆฌ(where์ ˆ)๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.


๐Ÿ’ก ๋™์ผํ•œ name์˜ ๊ฐ’ ๋ฐ›๊ธฐ

<input type="text" name="x"> <!-- ์ด๋ ‡๊ฒŒ ๋™์ผํ•œ name์ด ๋‘๊ฐœ ๋„˜์–ด์˜ค๋ฉด..? ์œ„์— ๋””๋ฒ„๊น… ์ฝ”๋“œ ํ™•์ธํ•ด๋ณด๊ธฐ..! -->
<input type="text" name="x">
<!-- ์ฒดํฌ๋ฐ•์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€! -->
<input type="checkbox" name="y" value="๊ตฌ" id="y1"><label for="y1">๊ตฌ</label>
<input type="checkbox" name="y" value="๋””" id="y2"><label for="y2">๋””</label>

์ด๋ ‡๊ฒŒ name์ด ๋™์ผํ•œ ๊ฒฝ์šฐ request.getParameter๋กœ ๊ฐ’์„ ๋ฐ›์•„์˜ค๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ’๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค.

// ๊ผญ input๋ผ๊ณ  ํ•ด์„œ name์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์„ ํ•„์š”๋Š” ์—†๋‹ค..! ์™œ๋ƒ๋ฉด
System.out.println(request.getParameter("x"));
// ์ด๋ ‡๊ฒŒ ๋ฐ›์œผ๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ’๋ฐ–์— ๋ชป๋ฐ›์•„์˜ค์ง€๋งŒ!
System.out.println(request.getParameterValues("x"));
// ์ด๋ ‡๊ฒŒ ๋ฐ›์œผ๋ฉด String ํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ๋ฐ›๊ฒŒ ๋œ๋‹ค

if(request.getParameterValues("x") != null) { // ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— null๊ฐ’์ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ if๋ฌธ ์ถ”๊ฐ€
	for(String s : request.getParameterValues("x")) { // ๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ foreach๋ฌธ์œผ๋กœ ๋ฐ›์•„์„œ ์ถœ๋ ฅํ•˜๋ฉด ๊ฐ’๋“ค์„ ๋‹ค ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค!
		System.out.println(s);
	}
}

// checkbox๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!
System.out.println(request.getParameter("y"));
System.out.println(request.getParameterValues("y"));
if(request.getParameterValues("y") != null) { // ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— null๊ฐ’์ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ if๋ฌธ ์ถ”๊ฐ€
	for(String s : request.getParameterValues("y")) {
		System.out.println(s);
	}
}

๊ทธ๋ž˜์„œ ์ด๋Ÿด ๋•Œ์—๋Š” request.getParameterValues๋ฅผ ์ด์šฉํ•˜๋ฉด ์„ ํƒํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋™์ผํ•œ name์˜ ๊ฐ’์„ ๋‹ค ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’๋“ค์€ Stringํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ๋ฐ›๊ฒŒ ๋˜๋ฏ€๋กœ, ์ถœ๋ ฅํ•  ๋•Œ์—๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค!


๐Ÿ’ก lastEmpList.jsp

์˜ค๋Š˜ ๋ฐฐ์šด request.getParameterValues์„ ์ด์šฉํ•˜์—ฌ ์ž…์‚ฌ์›” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ , ์ €๋ฒˆ ์‹œ๊ฐ„์— ๋ฐฐ์šด ์ด๋ฆ„ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ๋„ ํ•œํŽ˜์ด์ง€์— ์ถ”๊ฐ€ํ•ด๋ณด์•˜๋‹ค.

  • ๊ตฌํ˜„ํ•ด์•ผํ•  ์ 
    • ์ž…์‚ฌ์›” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
    • ์ด๋ฆ„ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
    • ๊ฒ€์ƒ‰ ํ›„ ๊ฒ€์ƒ‰ํ•œ ๊ฐ’ ํ‘œ์‹œ ์œ ์ง€
    • ํŽ˜์ด์ง•ํ•ด๋„ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ, ๊ฒ€์ƒ‰ํ•œ ๊ฐ’ ํ‘œ์‹œ ์œ ์ง€
    • ์ฒซํŽ˜์ด์ง€, ๋งˆ์ง€๋ง‰ํŽ˜์ด์ง€์— ์ด์ „/๋‹ค์Œ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ฒŒ

๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "vo.*" %>
<%@ page import = "java.util.*" %>
<%
	//์ฝ˜์†”์ฐฝ ์ถœ๋ ฅ ์ƒ‰์ƒ ์ง€์ • // final์ด ๋ถ™์€ ๋ณ€์ˆ˜๋Š” ๋ฐ‘์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค
	final String RED = "\u001B[31m";
	final String BG_RED = "\u001B[41m";
	final String GREEN = "\u001B[32m";
	final String BG_GREEN = "\u001B[42m";
	final String RESET = "\u001B[0m";
	
	// ์š”์ฒญ์ฒ˜๋ฆฌํ•ด์•ผํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’
	// currentPage, rowPerPage, ckMonth, searchWord
	System.out.println(RED + request.getParameter("currentPage") + " <-- lastEmpList param currentPage");
	System.out.println(request.getParameter("rowPerPage") + " <-- lastEmpList param rowPerPage");
	if(request.getParameterValues("ckMonth") != null) {
		for(String s : request.getParameterValues("ckMonth")) {
			System.out.println(s + "์›”" + " <-- lastEmpList param ckMonth");
		}
	}
	System.out.println(request.getParameter("searchWord") + " <-- lastEmpList param searchWord" + RESET);
	
	// ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (null์ด์–ด๋„ ๋˜๋Š”์ง€, ์•ˆ๋˜๋ฉด null์ด๋ฉด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€)
	// currentPage
	int currentPage = 1;
	if(request.getParameter("currentPage") != null) {
		currentPage = Integer.parseInt(request.getParameter("currentPage"));
	}
	// rowPerPage
	int rowPerPage = 10;
	if(request.getParameter("rowPerPage") != null) {
		rowPerPage = Integer.parseInt(request.getParameter("rowPerPage"));
	}
	// ckMonth
	// ckMonth์˜ ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ๋ฐฐ์—ด ์ƒ์„ฑ
	String[] ckMonth = request.getParameterValues("ckMonth"); // ์ฒดํฌ๋ฐ•์Šค์—์„œ ์„ ํƒํ•œ ๊ฐ’(request.getParameterValues๋กœ ๋ฐ›์Œ)์„ ์šฐ์„  ๋ฐฐ์—ด๋กœ ๊ฐ€์ ธ์˜จ๋‹ค // ํ•˜๋‚˜์ด์ƒ์˜ ๊ฐ’์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
	// checkbox ์ฒดํฌ ์œ ๋ฌด์— ์“ธ ๋ฐฐ์—ด ์ƒ์„ฑ
	boolean[] ckBoolean = new boolean[13]; // ์ธ๋ฑ์Šค๊ฐ€ 0๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด 13๊ฐœ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค // ์ธ๋ฑ์Šค0์€ ๋ฒ„๋ฆฐ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค
	// ckMonth์˜ ๊ฐ’๋“ค์„ intํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๋‹ด์„ ๋ฐฐ์—ด ์ƒ์„ฑ
	int[] intCkMonth = null; // int[] ๋Œ€์‹ ์— ArrayList<Integer>๋„ ๊ฐ€๋Šฅ
	// ์ƒ์„ฑํ•œ ๋ฐฐ์—ด๋“ค๋กœ ๊ฐ’ ๋ฐ›๊ธฐ
	if(ckMonth != null) {
		intCkMonth = new int[ckMonth.length]; // ckMonth์˜ length์™€ ๊ฐ™์€ ์ˆ˜๋งŒํผ(์„ ํƒํ•œ ๊ฐ’์˜ ์ˆ˜๋งŒํผ) ์šฐ์„  ๋ฐฐ์—ด์˜ ๊ณต๊ฐ„ ํ™•๋ณด
		for(int i=0; i<intCkMonth.length; i+=1) {
			intCkMonth[i] = Integer.parseInt(ckMonth[i]); // intCkMonth ๋ฐฐ์—ด์— ckMonth ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๋„ฃ๋Š”๋‹ค (intํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด)
			ckBoolean[intCkMonth[i]] = true; // intCkMonth[i]์— ๋“ค์–ด์žˆ๋Š” ?์›”์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์— ture๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค
		}
	}
	// searchWord
	String searchWord = ""; // ๊ณต๋ฐฑ๊ณผ null ๋‘˜๋‹ค ์‹คํ–‰ํ•  ์ฟผ๋ฆฌ๋Š” ๊ฐ™์œผ๋ฏ€๋กœ ๋™์ ์ฟผ๋ฆฌ ๋ถ„๊ธฐ๋ฅผ ์ค„์ด๊ธฐ์œ„ํ•ด ๊ณต๋ฐฑ์œผ๋กœ ํ†ต์ผ
	if(request.getParameter("searchWord") != null) {
		searchWord = request.getParameter("searchWord");
	}
	
	// ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ›„ ๊ฒฐ๊ณผ๋ณ€์ˆ˜ ๋””๋ฒ„๊น…
	System.out.println(GREEN + "ํ˜„์žฌ " + currentPage + "ํŽ˜์ด์ง€ <-- lastEmpList currentPage");
	System.out.println(rowPerPage + "๊ฐœ์”ฉ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค <-- lastEmpList rowPerPage");
	if(intCkMonth != null) {
		for(int m : intCkMonth) {
			System.out.println(m + "์›” <-- lastEmpList intCkMonth");
		}
		System.out.println("์š”์ฒญํ•œ ์›”์€ ์ด" + intCkMonth.length + "๊ฐœ ์ž…๋‹ˆ๋‹ค <-- lastEmpList intCkMonth.length");
	}
	System.out.println("์š”์ฒญํ•œ ๊ฒ€์ƒ‰๋‹จ์–ด๋Š” " + searchWord + " ์ž…๋‹ˆ๋‹ค <-- lastEmpList searchWord");
	
	// ์ฒซ๋ฒˆ์งธ ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// DB ํ˜ธ์ถœ // ํ˜ธ์ถœ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜ ์ƒ์„ฑ
	String driver = "org.mariadb.jdbc.Driver";
	String dbUrl = "jdbc:mariadb://127.0.0.1:3306/employees";
	String dbUser = "****";
	String dbPw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPw);
	
	// ๋ชจ๋ธ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์ถ”๊ฐ€
	int startRow = (currentPage - 1) * rowPerPage;
	System.out.println(startRow + " <-- lastEmpList startRow" + RESET);
	
	// ์ฒซ๋ฒˆ์งธ ๋™์ ์ฟผ๋ฆฌ ๋งŒ๋“ค๊ธฐ
	// ๊ฒฝ์šฐ์˜ ์ˆ˜
	// 1) ๋‘˜๋‹ค null 2) checkbox๋งŒ ๊ฐ’์ด ์žˆ์„๋•Œ 3) searchWord๋งŒ ๊ฐ’์ด ์žˆ์„๋•Œ 4) ๋‘˜๋‹ค ๊ฐ’์ด ์žˆ์„๋•Œ
	// 1) SELECT * FROM employees LIMIT ?, ?
	// 2) SELECT * FROM employees WHERE MONTH(hire_date) IN (?) LIMIT ?, ?
	// 3) SELECT * FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? LIMIT ?, ?
	// 4) SELECT * FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND MONTH(hire_date) IN (?) LIMIT ?, ?
	String sql = null;
	PreparedStatement stmt = null;
	// 1) ๋‘˜๋‹ค null์ผ๋•Œ
	if(intCkMonth == null && searchWord.equals("")) { 
		sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees LIMIT ?, ?";
		stmt = conn.prepareStatement(sql);
		stmt.setInt(1, startRow);
		stmt.setInt(2, rowPerPage);
	// 2) checkbox๋งŒ ๊ฐ’์ด ์žˆ์„๋•Œ
	} else if(intCkMonth != null && searchWord.equals("")) { 
		sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees WHERE MONTH(hire_date) IN (?";
		// ? ํ•œ๊ฐœ๋ฅผ ๋„ฃ๊ณ  ์‹œ์ž‘
		// ์ฟผ๋ฆฌ์— ๋ฌผ์Œํ‘œ๊ฐ€ ๋ช‡๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐˆ์ง€ ์…‹ํŒ…
		for(int i=1; i<intCkMonth.length; i+=1) { // ?์„ ๋„ฃ์—ˆ์œผ๋‹ˆ๊นŒ i๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘
			sql += ",?";
		}
		sql += ") LIMIT ?, ?"; // length๋งŒํผ ?๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ๋งˆ์ง€๋ง‰์—
		stmt = conn.prepareStatement(sql);
		// ์ฟผ๋ฆฌ ๋ฌผ์Œํ‘œ์— ๋ฌด์—‡์ด ๋“ค์–ด๊ฐˆ์ง€ ์…‹ํŒ…
		for(int i=0; i<intCkMonth.length; i+=1) { // ๋ฐฐ์—ด์€ 0๋ถ€ํ„ฐ.. ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ i๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘
			stmt.setInt(i+1, intCkMonth[i]); // ํ•ด๋‹น ๋ฐฐ์—ด ์œ„์น˜(0๋ถ€ํ„ฐ..)์— ์žˆ๋Š” ๊ฐ’์„ ?์— ์…‹ํŒ…
		}
		stmt.setInt(intCkMonth.length+1, startRow); // LIMIT ๋’ค์— ๋“ค์–ด๊ฐˆ ๋ฌผ์Œํ‘œ๋Š” length์˜ ์ˆ˜๋งŒํผ ๋ฌผ์Œํ‘œ๊ฐ€ ๋‚˜์˜จ ๋’ค์— ์‹œ์ž‘ํ•˜๊ธฐ๋•Œ๋ฌธ์— length+1
		stmt.setInt(intCkMonth.length+2, rowPerPage);
	// 3) searchWord๋งŒ ๊ฐ’์ด ์žˆ์„๋•Œ
	} else if(intCkMonth == null & !searchWord.equals("")) { 
		sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? LIMIT ?, ?";
		stmt = conn.prepareStatement(sql);
		stmt.setString(1, "%"+searchWord+"%");
		stmt.setInt(2, startRow);
		stmt.setInt(3, rowPerPage);
	// 4) ๋‘˜๋‹ค ๊ฐ’์ด ์žˆ์„๋•Œ
	} else { 
		sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND MONTH(hire_date) IN (?";
		for(int i=1; i<intCkMonth.length; i+=1) { 
			sql += ",?";
		}
		sql += ") LIMIT ?, ?";
		stmt = conn.prepareStatement(sql); // ๋ฌผ์Œํ‘œ๊ฐ€ ๋ช‡๊ฐœ ๋“ค์–ด๊ฐˆ์ง€ ๋จผ์ € ์…‹ํŒ… ์™„๋ฃŒ
		// searchWord ๊ฐ’ ?์— ์…‹ํŒ…
		stmt.setString(1, "%"+searchWord+"%");
		// checkbox ๊ฐ’ ?์— ์…‹ํŒ… 
		for(int i=0; i<intCkMonth.length; i+=1) {
			stmt.setInt(i+2, intCkMonth[i]); // ๋ฌด์กฐ๊ฑด ๋‘๋ฒˆ์งธ ๋ฌผ์Œํ‘œ๋ถ€ํ„ฐ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— i+2
		}
		stmt.setInt(intCkMonth.length+2, startRow); // LIMIT ๋’ค์— ๋“ค์–ด๊ฐˆ ๋ฌผ์Œํ‘œ๋Š” searchWord์˜ ๋ฌผ์Œํ‘œ 1๊ฐœ + length์˜ ์ˆ˜๋งŒํผ ๋ฌผ์Œํ‘œ๊ฐ€ ๋‚˜์˜จ ๋’ค์— ์‹œ์ž‘ํ•˜๊ธฐ๋•Œ๋ฌธ์— length+2
		stmt.setInt(intCkMonth.length+3, rowPerPage);
	} 
	// ์™„์„ฑ๋œ ๋™์ ์ฟผ๋ฆฌ ๋””๋ฒ„๊น… ํ•ด๋ณด๊ธฐ
	System.out.println(BG_GREEN+ stmt + " <-- lastEmpList ์ฒซ๋ฒˆ์งธ ๋™์ ์ฟผ๋ฆฌ ์™„์„ฑ" + RESET);
	
	ResultSet rs = stmt.executeQuery();
	// ์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ฐ”๊พธ๊ธฐ // ์—ฌ๋Ÿฌํ–‰์„ ์ถœ๋ ฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ArrayList๋กœ ๋ณ€๊ฒฝ
	ArrayList<Emp> empList = new ArrayList<Emp>(); 
	while(rs.next()) { // ๋ณ€์ˆ˜์ด๋ฆ„์„ ๋‹จ์ผ๋ฌธ์ž๋กœ ์ง“๋Š”๊ฑด ์ข‹์ง€ ์•Š์ง€๋งŒ, ์ง€๊ธˆ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” while๋ฌธ์˜ ๋ธ”๋ก ์•ˆ์—์„œ ์“ฐ๋Š” ์ž„์‹œ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์—
		Emp e = new Emp(); 
		e.empNo = rs.getInt("empNo"); // ์ปฌ๋Ÿผ๋ช… ๋Œ€์‹ ์— ์ˆซ์ž(1)์จ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค
		e.birthDate = rs.getString("birthDate");
		e.firstName = rs.getString("firstName");
		e.lastName = rs.getString("lastName");
		e.gender = rs.getString("gender");
		e.hireDate = rs.getString("hireDate");
		empList.add(e); 
	}
	
	// ๋‘๋ฒˆ์งธ ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// ๋ชจ๋ธ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์ถ”๊ฐ€
	int totalCount = 0; // count(*)๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค
	int lastPage = 0; // totalCount / rowPerPage๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค
	
	// ์ฒซ๋ฒˆ์งธ ๋™์ ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ totalCount๋ฅผ ๊ตฌํ•  count(*)์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋ถ„๊ธฐํ•ด์•ผ ํ•œ๋‹ค
	// ๋‘๋ฒˆ์งธ ๋™์ ์ฟผ๋ฆฌ ์ž‘์„ฑ
	// totalCount๋ฅผ ๊ตฌํ•˜๋Š” ๊ธฐ๋ณธ์ฟผ๋ฆฌ: SELECT count(*) FROM employees
	String sql2 = null;
	PreparedStatement stmt2 = null;
	// 1) ๋‘˜๋‹ค null์ผ๋•Œ
	if(intCkMonth == null && searchWord.equals("")) {
		sql2 = "SELECT count(*) FROM employees";
		stmt2 = conn.prepareStatement(sql2);
	// 2) checkbox๋งŒ ๊ฐ’์ด ์žˆ์„๋•Œ
	} else if(intCkMonth != null && searchWord.equals("")) { 
		sql2 = "SELECT count(*) FROM employees WHERE MONTH(hire_date) IN (?";
		// ์ฒซ๋ฒˆ์งธ ๋™์ ์ฟผ๋ฆฌ์™€ ๋™์ผํ•œ ์กฐ๊ฑด์—์„œ(where์ ˆ์ด ๋™์ผํ•œ) ๊ฐ’์„ ์นด์šดํŠธํ•œ๋‹ค
		for(int i=1; i<intCkMonth.length; i+=1) {
			sql2 += ",?";
		}
		sql2 += ")"; // count๋Š” limit์ด ํ•„์š” ์—†๋‹ค
		stmt2 = conn.prepareStatement(sql2);
		// ๋ฌผ์Œํ‘œ์— ๋“ค์–ด๊ฐˆ ๊ฐ’ ์…‹ํŒ…
		for(int i=0; i<intCkMonth.length; i+=1) { 
			stmt2.setInt(i+1, intCkMonth[i]);
		}
	// 3) searchWord๋งŒ ๊ฐ’์ด ์žˆ์„๋•Œ
	} else if(intCkMonth == null & !searchWord.equals("")) {
		sql2 = "SELECT count(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ?";
		stmt2 = conn.prepareStatement(sql2);
		stmt2.setString(1, "%"+searchWord+"%");
	// 4) ๋‘˜๋‹ค ๊ฐ’์ด ์žˆ์„๋•Œ
	} else { 
		sql2 = "SELECT count(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND MONTH(hire_date) IN (?";
		for(int i=1; i<intCkMonth.length; i+=1) { 
			sql2 += ",?";
		}
		sql2 += ")";
		stmt2 = conn.prepareStatement(sql2); // ๋ฌผ์Œํ‘œ๊ฐ€ ๋ช‡๊ฐœ ๋“ค์–ด๊ฐˆ์ง€ ๋จผ์ € ์…‹ํŒ… ์™„๋ฃŒ
		// searchWord ๊ฐ’ ?์— ์…‹ํŒ…
		stmt2.setString(1, "%"+searchWord+"%");
		// checkbox ๊ฐ’ ?์— ์…‹ํŒ… 
		for(int i=0; i<intCkMonth.length; i+=1) {
			stmt2.setInt(i+2, intCkMonth[i]); // ๋ฌด์กฐ๊ฑด ๋‘๋ฒˆ์งธ ๋ฌผ์Œํ‘œ๋ถ€ํ„ฐ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— i+2
		}
	} 
	// ์™„์„ฑ๋œ ๋™์ ์ฟผ๋ฆฌ ๋””๋ฒ„๊น… ํ•ด๋ณด๊ธฐ
	System.out.println(BG_RED+ stmt2 + " <-- lastEmpList ๋‘๋ฒˆ์งธ ๋™์ ์ฟผ๋ฆฌ ์™„์„ฑ" + RESET);
	
	ResultSet rs2 = stmt2.executeQuery();
	// ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅ
	if(rs2.next()) {
		totalCount = rs2.getInt("count(*)");
	}
	System.out.println(GREEN + totalCount + " <-- lastEmpList ๋ถ„๊ธฐ์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ์ด ๊ฐฏ์ˆ˜");
	
	// lastPage ๊ตฌํ•˜๊ธฐ
	lastPage = totalCount / rowPerPage;
	if(totalCount % rowPerPage != 0) { // ํŽ˜์ด์ง€๊ฐ€ ๋”ฑ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ ์ถœ๋ ฅ๋  ํ•œํŽ˜์ด์ง€๊ฐ€ ๋” ํ•„์š”ํ•˜๋ฏ€๋กœ
		lastPage = lastPage + 1; 
	}
	System.out.println(lastPage + " <-- lastEmpList ๋ถ„๊ธฐ์— ๋”ฐ๋ฅธ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ๋„˜๋ฒ„" + RESET);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lastEmpList.jsp</title>
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
 	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container mt-3">
	<div class="p-5 bg-primary text-white text-center">
		<h1>์‚ฌ์›๋ชฉ๋ก</h1>
	</div>
	<table class="table text-center">
		<thead class="table-primary">
			<tr>
				<th>์‚ฌ์›๋ฒˆํ˜ธ</th>
				<th>์ƒ๋…„์›”์ผ</th>
				<th>์ด๋ฆ„</th>
				<th>์„ฑ</th>
				<th>์„ฑ๋ณ„</th>
				<th>์ž…์‚ฌ์ผ</th>
			</tr>
		</thead>
		<tbody>
			<%
				for(Emp e : empList) { 
			%>
					<tr>
						<td><%=e.empNo%></td>
						<td><%=e.birthDate%></td>
						<td><%=e.firstName%></td>
						<td><%=e.lastName%></td>
						<td><%=e.gender%></td>
						<td><%=e.hireDate%></td>
					</tr>
			<%
				}
			%>
		</tbody>
	</table>
	<!-- ์š”์ฒญํผ -->
	<div class="text-center">
		<form action="./lastEmpList.jsp" method="get">
			<label for="hireMonth">์ž…์‚ฌ์›” ๊ฒ€์ƒ‰ : </label>
			<%
				int[] months = {1,2,3,4,5,6,7,8,9,10,11,12};
				for(int m : months) {
			%>
					<!-- ์œ„์—์„œ ๋งŒ๋“  ckBoolean ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค -->
					<input type="checkbox" name="ckMonth" value="<%=m%>" <% if(ckBoolean[m]) { %> checked <% } %> id="hireMonth">
					<%=m%>์›”
			<%
				}
			%>
			<br>
			<label for="name">์ด๋ฆ„ ๊ฒ€์ƒ‰ : </label>
				<input type="text" name="searchWord" value="<%=searchWord%>" id="name"> <!-- ๊ฒ€์ƒ‰ํ•œ ๊ฐ’์„ ํ‘œ์‹œํ•ด์ฃผ๊ธฐ ์œ„ํ•ด -->
			<button type="submit">๊ฒ€์ƒ‰</button>
		</form>
	</div>
	<!-- ํŽ˜์ด์ง• -->
	<div class="mt-5 p-4 bg-secondary text-white text-center">
		<%
			// ckMonth์˜ ๊ฐ’์„ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
			String ckMstring = "";
			if(ckMonth != null) {
				for(String m : ckMonth) {
					ckMstring += "&ckMonth=" + m;
				}
			}
			
			if(currentPage > 1) { // ํ˜„์žฌํŽ˜์ด์ง€๊ฐ€ 1๋ณด๋‹ค ํฌ๋ฉด "์ด์ „"์„ ์ถœ๋ ฅ
		%>
				<a href="./lastEmpList.jsp?currentPage=<%=currentPage - 1%>&rowPerPage=<%=rowPerPage%>&searchWord=<%=searchWord%><%=ckMstring%>" class="btn btn-primary btn-sm">์ด์ „</a>
		<%
			}
		%>
			<%=currentPage%>ํŽ˜์ด์ง€
		<%
			if(lastPage > currentPage) { // ํ˜„์žฌํŽ˜์ด์ง€๊ฐ€ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ๋„˜๋ฒ„๋ณด๋‹ค ์ž‘์œผ๋ฉด "๋‹ค์Œ"์„ ์ถœ๋ ฅ
		%>
				<a href="./lastEmpList.jsp?currentPage=<%=currentPage + 1%>&rowPerPage=<%=rowPerPage%>&searchWord=<%=searchWord%><%=ckMstring%>" class="btn btn-primary btn-sm">๋‹ค์Œ</a>
		<%
			}
		%>
	</div>
</div>
</body>
</html>
  • boolean[] ckBoolean = new boolean[13]; : textํƒ€์ž…์˜ input ํƒœ๊ทธ๋Š” value์— ํ•ด๋‹น ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, checkboxํƒ€์ž…์€ checked๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•˜๋ฏ€๋กœ boolean ํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น์›”๊ณผ ์ผ์น˜ํ•˜๋Š” ์ธ๋ฑ์Šค์— true๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

  • ์ฟผ๋ฆฌ ์ž‘์„ฑ์‹œ ์ž…์‚ฌ์›” ๊ฒ€์ƒ‰์€ IN ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ž…์‚ฌ์›”์„ ๋ช‡๊ฐœ ์„ ํƒํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋ฌผ์Œํ‘œ(?) ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— length์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฌผ์Œํ‘œ๋ฅผ ์…‹ํŒ…ํ•œ๋‹ค.

  • 1~12์›”์„ ์ถœ๋ ฅ ์‹œ์— inputํƒœ๊ทธ๋ฅผ 12๊ฐœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹จ ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐํžˆ ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ for๋ฌธ์„ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ 1~12์›”์ด๋ผ๋Š” ๊ตฐ์ง‘์—์„œ ์ถœ๋ ฅํ•˜๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— foreach๋ฌธ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์“ฐ์ž„์— ๋งž๋‹ค.

  • ์„ ํƒํ•œ ๊ฐ’์„ ์œ ์ง€์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ „/๋‹ค์Œ์œผ๋กœ ํŽ˜์ด์ง•์‹œ aํƒœ๊ทธ์— ํ•ด๋‹น ๊ฐ’๋“ค์„ ๊ฐ™์ด ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์ด ๋„˜์–ด๊ฐ€๋Š” ckMonth์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์ด๋ฏ€๋กœ url์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ํ‘œ์‹œ๋˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ’์„ ์ •์ƒ์ ์œผ๋กœ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.


๐Ÿ“ ๊ฒฐ๊ณผ





๐Ÿง ํ•˜๋ฃจ๋ฅผ ๋งˆ์น˜๋ฉฐ

์ด๋ฒˆ ์ฝ”๋“œ๋Š” ๋™์ ์ฟผ๋ฆฌ๋„ ๋ณต์žกํ•˜๊ณ , ์ฟผ๋ฆฌ ์ž‘์„ฑ ์‹œ์— ๊ณ ๋ คํ•ด์•ผํ•  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋””ํ…Œ์ผ์ด ๋งŽ์•˜๋‹ค. ๋˜ํ•œ ๊ฐ’์„ ์ •์ƒ์ ์œผ๋กœ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋‚˜ ๋ฐฐ์—ด๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.(booleanํƒ€์ž… ๋ฐฐ์—ด, ckMonth์˜ ๊ฐ’์„ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜ ๋“ฑ) ์ด๋ฒˆ ์ฝ”๋“œ๋Š” ์—ฌ๋Ÿฌ๋ฒˆ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด์„œ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ, ๋ฐฐ์—ด์˜ ๊ฐœ๋…์„ ๋‹ค์‹œ ์ˆ™์ง€ํ•˜๊ณ  ๋™์ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์— ์ต์ˆ™ํ•ด์ง€๋„๋ก ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค!



profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ๐Ÿ’ช ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ ๐ŸŒฑ๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€