[๊ตฌ๋””์•„์นด๋ฐ๋ฏธ IT๊ตญ๋น„์ง€์›] ์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์–ด์„œ ์˜ค๋ผํด์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์› ๋ชฉ๋ก ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ํŽ˜์ด์ง• ์ž‘์—…๋„ ํ•ด๋ณด์•˜๋‹ค.


๐Ÿ’ก ์‚ฌ์› ๋ชฉ๋ก ํŽ˜์ด์ง€


์˜ค๋ผํด์˜ hr ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ employees ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์› ๋ชฉ๋ก ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ํ•ด๋ณด์•˜๋‹ค. ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ๋น„ํšŒ์›(์‚ฌ์›์ด ์•„๋‹Œ ์‚ฌ๋žŒ)๋„ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์‚ฌ์› ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ๋Š” ํšŒ์›(์‚ฌ์›์ธ ์‚ฌ๋žŒ)๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ–ˆ๋‹ค. ๋˜ํ•œ, ์ˆ˜์ •/์‚ญ์ œ๋Š” ๋ณธ์ธ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ–ˆ๋‹ค.


๐Ÿ“Œ Employee.java

package vo;

public class Employee {
	private int employeeId;
	private String firstName;
	private String lastName;
	private String email;
	private String phoneNumber;
	private String hireDate;
	private String jobId;
	private double salary;
	private double commissionPct;
	private int managerId;
	private int departmentId;
	
	public int getEmployeeId() {
		return employeeId;
	}
	public void setEmployeeId(int employeeId) {
		this.employeeId = employeeId;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhoneNumber() {
		return phoneNumber;
	}
	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}
	public String getHireDate() {
		return hireDate;
	}
	public void setHireDate(String hireDate) {
		this.hireDate = hireDate;
	}
	public String getJobId() {
		return jobId;
	}
	public void setJobId(String jobId) {
		this.jobId = jobId;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public double getCommissionPct() {
		return commissionPct;
	}
	public void setCommissionPct(double commissionPct) {
		this.commissionPct = commissionPct;
	}
	public int getManagerId() {
		return managerId;
	}
	public void setManagerId(int managerId) {
		this.managerId = managerId;
	}
	public int getDepartmentId() {
		return departmentId;
	}
	public void setDepartmentId(int departmentId) {
		this.departmentId = departmentId;
	}
}

Employee ํด๋ž˜์Šค ์ƒ์„ฑ

๐Ÿ“Œ home.jsp

๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "vo.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>home.jsp</title>
	<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<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-5">
	<!------------------------------------------ ๋กœ๊ทธ์ธ ํผ ์‹œ์ž‘ ------------------------------------------>
	<%
		// ์„ธ์…˜๊ฐ’์ด null์ผ๋•Œ๋งŒ ๋กœ๊ทธ์ธ ํผ ์ถœ๋ ฅ
		if(session.getAttribute("loginEmployee") == null) {
	%>
			<h1>๋กœ๊ทธ์ธ</h1>
			<div class="text-danger">
				<%	// msg ๋ฐœ์ƒ์‹œ ์ถœ๋ ฅ
					if(request.getParameter("msg") != null) {
				%>
						<%=request.getParameter("msg")%>
				<%
					}
				%>
			</div>
			<!-- employeeId, firstName, lastName ์„ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ -->
			<form action="<%=request.getContextPath()%>/employee/loginAction.jsp" method="post">
				<table>
					<tr>
						<th>employeeId</th>
						<td>
							<input type="number" name="employeeId">
						</td>
					</tr>
					<tr>
						<th>firstName</th>
						<td>
							<input type="text" name="firstName">
						</td>
					</tr>
					<tr>
						<th>lastName</th>
						<td>
							<input type="text" name="lastName">
						</td>
					</tr>
				</table>
				<button type="submit" class="btn btn-secondary">๋กœ๊ทธ์ธ</button>
			</form>
	<%
		}
	%>
	<!------------------------------------------ ๋กœ๊ทธ์ธ ํผ ๋ ------------------------------------------>
	
	<!------------------------------------------ ์‹œ์ž‘ํŽ˜์ด์ง€ ์ถœ๋ ฅ ------------------------------------------>
	<%
		// ์„ธ์…˜๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด ์ถœ๋ ฅ
		if(session.getAttribute("loginEmployee") != null) {
			// ์„ธ์…˜๊ฐ’ ๋ฐ›์•„์˜ค๊ธฐ
			Object o = session.getAttribute("loginEmployee");
			Employee sessionEmployee = null;
			if(o instanceof Employee) { // instanceof์—ฐ์‚ฐ์ž : ๊ฐ์ฒด๋ณ€์ˆ˜ instanceof ํƒ€์ž…
				sessionEmployee = (Employee)o;
			}
	%>
			<h1>welcome!</h1>
			<p class="card-text">ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค <%=sessionEmployee.getFirstName()%>๋‹˜ :)</p>
			<div class="card" style="width:400px">
				<img class="card-img-top" src="<%=request.getContextPath()%>/img/cardImg.png" alt="Card image" style="width:100%">
				<div class="card-body">
					<h4 class="card-title"><%=sessionEmployee.getFirstName()%> <%=sessionEmployee.getLastName()%></h4>
				    <p class="card-text"> employeeId : <%=sessionEmployee.getEmployeeId()%></p>
				    <a href="<%=request.getContextPath()%>/employee/logoutAction.jsp" class="btn btn-outline-secondary">
						๋กœ๊ทธ์•„์›ƒ
					</a>
				</div>
			</div>
	<%
		}
	%>
	<!------------------------------------------ ์‹œ์ž‘ํŽ˜์ด์ง€ ๋ ------------------------------------------>
	<br>
	<div>
		<a href="<%=request.getContextPath()%>/employee/employeeList.jsp" class="btn btn-outline-secondary">
			์‚ฌ์› ๋ชฉ๋ก ๋ณด๊ธฐ
		</a>
	</div>
</div>
</body>
</html>

๐Ÿ“ ๊ฒฐ๊ณผ

๋กœ๊ทธ์ธ ์ „, ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์› ๋ชฉ๋ก ๋ณด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด employeeList.jsp๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.


๋กœ๊ทธ์ธ ํ›„ ํ™”๋ฉด


๐Ÿ“Œ loginAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.net.*" %>
<%@ page import = "vo.*" %>
<%
	// ํ•œ๊ธ€ ๊นจ์ง€์ง€ ์•Š๊ฒŒ ์ธ์ฝ”๋”ฉ
	request.setCharacterEncoding("utf-8");

	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// 1-1) ์„ธ์…˜๊ฐ’
	// ๋กœ๊ทธ์ธ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ฉด ์ด ํŽ˜์ด์ง€์— ์˜ฌ ์ˆ˜ ์—†๋‹ค
	if(session.getAttribute("loginEmployee") != null) {
		response.sendRedirect(request.getContextPath() + "/home.jsp");
		return;
	}
	// 1-2) ์š”์ฒญ๊ฐ’
	// employeeId, firstName, lastName
	String msg = null;
	if(request.getParameter("employeeId") == null
			|| request.getParameter("employeeId").equals("")) {
		msg = URLEncoder.encode("employeeId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("firstName") == null
			|| request.getParameter("firstName").equals("")) {
		msg = URLEncoder.encode("firstName์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");	
 	} else if(request.getParameter("lastName") == null
			|| request.getParameter("lastName").equals("")) {
		msg = URLEncoder.encode("lastName์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	}
	// null์ด๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์ด๋ฉด home์œผ๋กœ
	if(msg != null) {
		response.sendRedirect(request.getContextPath() + "/home.jsp?msg=" + msg);
		return;
	}
	// null์ด๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์ด ์•„๋‹ˆ๋ฉด ๊ฐ’ ๋ฐ›์•„์˜ค๊ธฐ
	int employeeId = Integer.parseInt(request.getParameter("employeeId"));
	String firstName = request.getParameter("firstName");
	String lastName = request.getParameter("lastName");
	System.out.println(employeeId + " <- loginAction employeeId");
	System.out.println(firstName + " <- loginAction firstName");
	System.out.println(lastName + " <- loginAction lastName");
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// 2-1) ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2) ์ฟผ๋ฆฌ ์ž‘์„ฑ
	// ์ž…๋ ฅํ•œ ์ •๋ณด๊ฐ€ db์— ์žˆ๋Š”์ง€ ์กฐํšŒ
	String sql = "SELECT count(*) FROM employees WHERE employee_id = ? AND first_name = ? AND last_name = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setInt(1, employeeId);
	stmt.setString(2, firstName);
	stmt.setString(3, lastName);
	ResultSet rs = stmt.executeQuery();
	
	// ๋ชจ๋ธ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅ
	int empCnt = 0;
	if(rs.next()) {
		empCnt = rs.getInt(1);
	}
	
	// ์ž…๋ ฅํ•œ ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜๋ฉด(count๊ฐ€ 1์ด๋ฉด) ์„ธ์…˜์— ์ €์žฅ
	if(empCnt == 1) {
		Employee loginEmployee = new Employee();
		loginEmployee.setEmployeeId(employeeId);
		loginEmployee.setFirstName(firstName);
		loginEmployee.setLastName(lastName);
		session.setAttribute("loginEmployee", loginEmployee);
		System.out.println("๋กœ๊ทธ์ธ ์„ฑ๊ณต");
	} else {
		msg = URLEncoder.encode("๋กœ๊ทธ์ธ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค", "utf-8");
		System.out.println("๋กœ๊ทธ์ธ ์‹คํŒจ");
	}
	
	// ํ™ˆ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	response.sendRedirect(request.getContextPath() + "/home.jsp?msg=" + msg);
%>

๐Ÿ“Œ logoutAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	session.invalidate(); // ๊ธฐ์กด ์„ธ์…˜์„ ์ง€์šฐ๊ณ  ๊ฐฑ์‹ 
	response.sendRedirect(request.getContextPath() + "/home.jsp");
%>

๐Ÿ“Œ mainmenu.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div class="container mt-5">
	<ul class="nav nav-tabs" role="tablist">
	<%
		// ์„ธ์…˜ ๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด ์ถ”๊ฐ€/๋กœ๊ทธ์•„์›ƒ ์ถœ๋ ฅ
		if(session.getAttribute("loginEmployee") != null) {
	%>
			<li class="nav-item">
				<a href="<%=request.getContextPath()%>/employee/addEmployee.jsp" class="nav-link active">
					์‚ฌ์› ์ถ”๊ฐ€
				</a>
			</li>
			<li class="nav-item">
				<a href="<%=request.getContextPath()%>/employee/logoutAction.jsp" class="nav-link active">
					๋กœ๊ทธ์•„์›ƒ
				</a>
			</li>
	<%
		// ์„ธ์…˜ ๊ฐ’์ด null์ด๋ฉด ๋กœ๊ทธ์ธ ์ถœ๋ ฅ
		} else {
	%>
			<li class="nav-item">
				<a href="<%=request.getContextPath()%>/home.jsp" class="nav-link active">
					๋กœ๊ทธ์ธ
				</a>
			</li>
	<%
		}
	%>
	</ul>
</div>

employeeList.jsp ํŽ˜์ด์ง€ ์ƒ๋‹จ์— incluedํ•  ๋ฉ”์ธ ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์‚ฌ์› ์ถ”๊ฐ€์™€ ๋กœ๊ทธ์•„์›ƒ ๋ฉ”๋‰ด๋Š” ๋กœ๊ทธ์ธ ์ƒํƒœ์—์„œ ์ถœ๋ ฅ, ๋น„๋กœ๊ทธ์ธ์‹œ์—๋Š” ๋กœ๊ทธ์ธ ๋ฉ”๋‰ด๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ํ–ˆ๋‹ค.

๐Ÿ“Œ employeeList.jsp

๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import = "java.util.*" %> <!-- ArrayList ์‚ฌ์šฉ -->
<%@ page import = "vo.*" %>
<%
	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ํŽ˜์ด์ง•์„ ์œ„ํ•œ ์š”์ฒญ๊ฐ’ ์ฒ˜๋ฆฌ
	int currentPage = 1;
	if(request.getParameter("currentPage") != null) {
		currentPage = Integer.parseInt(request.getParameter("currentPage"));
	}
	int rowPerPage = 10;
	if(request.getParameter("rowPerPage") != null) {
		rowPerPage = Integer.parseInt(request.getParameter("rowPerPage"));
	}
	// ๋งˆ๋ฆฌ์•„db์™€ ๋‹ค๋ฅด๊ฒŒ ์˜ค๋ผํด์€ limit์„ ์“ธ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— beginRow์™€ endRow ๋‘˜๋‹ค ๊ตฌํ•ด์•ผ ํ•œ๋‹ค
	/*
		rowPerPage๊ฐ€ 10์ผ ๋•Œ
		currentPage		beginRow		endRow
		1				1				10
		2				11				20
		3				21				30
		4				31				40
	*/
	int beginRow = (currentPage - 1) * rowPerPage + 1;
	int endRow = beginRow + (rowPerPage - 1);
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-1) totalCnt ๋ชจ๋ธ์…‹
	// ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€์—์„œ endRow์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— totalCnt๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค
	int totalCnt = 0;
	
	// ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String totalCntSql = "SELECT count(*) FROM EMPLOYEES";
	PreparedStatement totalCntStmt = conn.prepareStatement(totalCntSql);
	ResultSet totalCntRs = totalCntStmt.executeQuery();
	
	// ๋ชจ๋ธ์…‹ ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅ
	if(totalCntRs.next()) {
		totalCnt = totalCntRs.getInt(1);
		// ๋ฐ˜ํ™˜ํ•  ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜์ผ ๋•Œ์—๋Š” index(์ˆซ์ž) ์‚ฌ์šฉ์„ ๊ถŒ์žฅ
	}
	
	// endRow if๋ฌธ ์ถ”๊ฐ€
	if(endRow > totalCnt) {
		endRow = totalCnt;
	}
	
	// ๋””๋ฒ„๊น…
	System.out.println("ํ˜„์žฌ " + currentPage + "ํŽ˜์ด์ง€ <- employeeList currentPage");
	System.out.println(rowPerPage + "๊ฐœ์”ฉ <- employeeList rowPerPage");
	System.out.println(beginRow + "๋ฒˆ๋ถ€ํ„ฐ <- employeeList beginRow");
	System.out.println(endRow + "๋ฒˆ๊นŒ์ง€ <- employeeList endRow");
	System.out.println("์ „์ฒด ํ–‰ ๊ฐฏ์ˆ˜: " + totalCnt + "๊ฐœ <- employeeList totalCnt");
	
	// 2-2) employeeList ๋ชจ๋ธ์…‹
	// employees ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์กฐํšŒ // ํŽ˜์ด์ง•์„ ์œ„ํ•ด rownum ์‚ฌ์šฉ // hireDate ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
	/*
		SELECT e3.*
			FROM
				(SELECT
					rownum rnum,
					e2.*
				FROM
					(SELECT
						rownum,
						e1.*
					FROM employees e1
					ORDER BY e1.hire_date DESC) e2) e3
		WHERE e3.rnum BETWEEN ? AND ?
	*/
	String employeeListSql = "SELECT e3.* FROM (SELECT rownum rnum, e2.* FROM (SELECT rownum, e1.* FROM employees e1 ORDER BY e1.hire_date DESC) e2) e3 WHERE e3.rnum BETWEEN ? AND ?";
	PreparedStatement employeeListStmt = conn.prepareStatement(employeeListSql);
	employeeListStmt.setInt(1, beginRow);
	employeeListStmt.setInt(2, endRow);
	ResultSet employeeListRs = employeeListStmt.executeQuery();
	
	// ArrayList๋กœ ๋ฐ”๊พธ๊ธฐ
	ArrayList<Employee> employeeList = new ArrayList<Employee>();
	while(employeeListRs.next()) {
		Employee e = new Employee();
		e.setEmployeeId(employeeListRs.getInt("employee_id"));
		e.setFirstName(employeeListRs.getString("first_name"));
		e.setLastName(employeeListRs.getString("last_name"));
		e.setEmail(employeeListRs.getString("email"));
		e.setPhoneNumber(employeeListRs.getString("phone_number"));
		e.setHireDate(employeeListRs.getString("hire_date"));
		e.setJobId(employeeListRs.getString("job_id"));
		e.setSalary(employeeListRs.getDouble("salary"));
		e.setCommissionPct(employeeListRs.getDouble("commission_pct"));
		e.setManagerId(employeeListRs.getInt("manager_id"));
		e.setDepartmentId(employeeListRs.getInt("department_id"));
		employeeList.add(e);
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>employeeList.jsp</title>
	<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<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>
<!-- include ํŽ˜์ด์ง€ : ๋ฉ”์ธ๋ฉ”๋‰ด(๊ฐ€๋กœ) -->	
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->	
<div class="container mt-5">
	<!---------------------- employeeList ๋ชจ๋ธ์…‹ ์‹œ์ž‘ ---------------------->
	<table class="table table-bordered">
		<thead class="table-secondary">
			<tr>
				<th>employeeId</th>
				<th>firstName</th>
				<th>lastName</th>
				<th>email</th>
				<th>phoneNumber</th>
				<th>hireDate</th>
				<th>jobId</th>
				<th>salary</th>
				<th>commissionPct</th>
				<th>managerId</th>
				<th>departmentId</th>
				<th>์ˆ˜์ • / ์‚ญ์ œ</th>
			</tr>
		</thead>
		<tbody>
			<%
				for(Employee e : employeeList) {
			%>
					<tr>
						<td><%=e.getEmployeeId()%></td>
						<td><%=e.getFirstName()%></td>
						<td><%=e.getLastName()%></td>
						<td><%=e.getEmail()%></td>
						<td><%=e.getPhoneNumber()%></td>
						<td><%=e.getHireDate().substring(0, 10)%></td>
						<td><%=e.getJobId()%></td>
						<td><%=e.getSalary()%></td>
						<td><%=e.getCommissionPct()%></td>
						<td><%=e.getManagerId()%></td>
						<td><%=e.getDepartmentId()%></td>
						<td>
							<!-- ์„ธ์…˜ ์ •๋ณด๊ฐ€ ์ผ์น˜ํ•  ๋•Œ๋งŒ ์ˆ˜์ • / ์‚ญ์ œ ๋ฒ„ํŠผ ์ถœ๋ ฅ -->
							<% 
								if(session.getAttribute("loginEmployee") != null) {
									// ์„ธ์…˜ ๊ฐ’ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
									Object o = session.getAttribute("loginEmployee");
									Employee sessionEmployee = null;
									if(o instanceof Employee) { // instanceof์—ฐ์‚ฐ์ž : ๊ฐ์ฒด๋ณ€์ˆ˜ instanceof ํƒ€์ž…
										sessionEmployee = (Employee)o;
									}
									// ์„ธ์…˜ ์ •๋ณด ๋ณ€์ˆ˜์— ์ €์žฅ
									int sessionEmployeeId = sessionEmployee.getEmployeeId();
										// ์„ธ์…˜ ์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
										if(sessionEmployeeId == e.getEmployeeId()) {
							%>
											<a href="<%=request.getContextPath()%>/employee/modifyEmployee.jsp?employeeId=<%=e.getEmployeeId()%>" class="btn btn-sm">
												&#x270F;
											</a>
											<a href="<%=request.getContextPath()%>/employee/removeEmployeeAction.jsp?employeeId=<%=e.getEmployeeId()%>" class="btn btn-sm">
												&#x1F5D1;
											</a>
							<%
										}
									
								}
							%>
						</td>
					</tr>
			<%
				}
			%>
		</tbody>
	</table>
	<!---------------------- employeeList ๋ชจ๋ธ์…‹ ๋ ---------------------->
	
	<div class="text-center">
		<!---------------------------- ํŽ˜์ด์ง• ์‹œ์ž‘ ---------------------------->
		<%
			if(currentPage > 1) { // 1ํŽ˜์ด์ง€๋ฉด "์ด์ „"์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค
		%>
				<a href="<%=request.getContextPath()%>/employee/employeeList.jsp?currentPage=<%=currentPage - 1%>&rowPerPage=<%=rowPerPage%>" class="btn btn-sm btn-secondary">์ด์ „</a>
		<%
			}
		%>
		
		<%=currentPage%>ํŽ˜์ด์ง€
		
		<%
			if(endRow != totalCnt) { // ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€๋ฉด "๋‹ค์Œ"์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค
		%>
				<a href="<%=request.getContextPath()%>/employee/employeeList.jsp?currentPage=<%=currentPage + 1%>&rowPerPage=<%=rowPerPage%>" class="btn btn-sm btn-secondary">๋‹ค์Œ</a>
		<%
			}
		%>
		<!---------------------------- ํŽ˜์ด์ง• ๋ ---------------------------->
	</div>
</div>
</body>
</html>
  • ์ง€๋‚œ ์‹œ๊ฐ„์— ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์˜ค๋ผํดdb๋กœ ํŽ˜์ด์ง•์„ ํ•ด๋ณด์•˜๋‹ค. ๋˜ํ•œ, rownum์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ์ž‘์„ฑ์‹œ์—๋„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ–ˆ๋‹ค. ๋‹ค์†Œ ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ ์ฐจ๊ทผ์ฐจ๊ทผ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค!

instanceof ์—ฐ์‚ฐ์ž

// ์„ธ์…˜์— ์ถ”๊ฐ€ํ• ๋•Œ
Employee loginEmployee = new Employee();
session.setAttribute("loginEmployee", loginEmployee);
	
// ์„ธ์…˜์—์„œ ๊ฐ€์ ธ์˜ฌ๋•Œ
Object o = session.getAttribute("loginEmployee");
Employee sessionEmployee = null;
	
if(o instanceof Employee) { // instanceof์—ฐ์‚ฐ์ž : ๊ฐ์ฒด๋ณ€์ˆ˜ instanceof ํƒ€์ž…
	sessionEmployee = (Employee)o;
}
  • instanceof ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ํŠน์ • ํด๋ž˜์Šค์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒˆ ๊ณผ์ œ์˜ ๊ฒฝ์šฐ ํšŒ์› ์ •๋ณด๊ฐ€ 11๊ฐ€์ง€์ด๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ ์„ธ์…˜์— Employee ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ณ , ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ์—๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

๐Ÿ“ ๊ฒฐ๊ณผ

๋กœ๊ทธ์ธX


๋กœ๊ทธ์ธO, ์ˆ˜์ •/์‚ญ์ œ ๋ฒ„ํŠผ์€ ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์•„์ด๋””์ผ ๋•Œ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

๐Ÿ“Œ addEmployee.jsp

๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%
	// ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ๋ฉด ์ด ํŽ˜์ด์ง€์— ์˜ฌ ์ˆ˜ ์—†๋‹ค
	if(session.getAttribute("loginEmployee") == null) {
		response.sendRedirect(request.getContextPath() + "/employeeList.jsp");
		return;
	}

	// ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// ์™ธ๋ž˜ํ‚ค ์นผ๋Ÿผ ์กฐํšŒ๋ฅผ ์œ„ํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ
	// JOBS
	String jobSql = "SELECT job_id jobId FROM JOBS";
	PreparedStatement jodStmt = conn.prepareStatement(jobSql);
	ResultSet jodRs = jodStmt.executeQuery();
	// DEPARTMENTS
	String departmentSql = "SELECT department_id deptId FROM DEPARTMENTS";
	PreparedStatement departmentStmt = conn.prepareStatement(departmentSql);
	ResultSet departmentRs = departmentStmt.executeQuery();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>addEmployee.jsp</title>
	<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<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>
<!-- include ํŽ˜์ด์ง€ : ๋ฉ”์ธ๋ฉ”๋‰ด(๊ฐ€๋กœ) -->	
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->	
<div class="container mt-5">
	<!---------------------- add form ์‹œ์ž‘ ---------------------->
	<h3>์‚ฌ์› ์ถ”๊ฐ€</h3>
		<!-- ์‹คํŒจ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
		<div class="text-danger">
			<%
				if(request.getParameter("msg") != null) {
			%>
					<%=request.getParameter("msg")%>
			<%
				}
			%>
		</div>
		<form action="<%=request.getContextPath()%>/employee/addEmployeeAction.jsp" method="post">
			<table class="table table-bordered">
				<tr>
					<th class="table-secondary">employeeId</th>
					<td>
						<input type="number" name="employeeId">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">firstName</th>
					<td>
						<input type="text" name="firstName">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">lastName</th>
					<td>
						<input type="text" name="lastName">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">email</th>
					<td>
						<input type="text" name="email">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">phoneNumber</th>
					<td>
						<input type="text" name="phoneNumber">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">hireDate</th>
					<td>
						<input type="date" name="hireDate">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">jobId</th>
					<td>
						<select name="jobId">
							<%
								while(jodRs.next()) {
							%>
								<option value="<%=jodRs.getString("jobId")%>"><%=jodRs.getString("jobId")%></option>
							<%
								}
							%>
						</select>
					</td>
				</tr>
				<tr>
					<th class="table-secondary">salary</th>
					<td>
						<input type="number" name="salary">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">commissionPct</th>
					<td>
						<input type="number" name="commissionPct" step="0.01" max="0.99" placeholder="๋ฒ”์œ„: 1๋ฏธ๋งŒ">
						<!-- ์†Œ์ˆซ์  ์ž…๋ ฅ ํ—ˆ์šฉ, ์ž…๋ ฅ ๋ฒ”์œ„ 1๋ฏธ๋งŒ์œผ๋กœ ์ œํ•œํ•˜๊ธฐ -->
					</td>
				</tr>
				<tr>
					<th class="table-secondary">managerId</th>
					<td>
						<input type="number" name="managerId">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">departmentId</th>
					<td>
						<select name="departmentId">
							<%
								while(departmentRs.next()) {
							%>
								<option value="<%=departmentRs.getInt("deptId")%>"><%=departmentRs.getInt("deptId")%></option>
							<%
								}
							%>
						</select>
					</td>
				</tr>
			</table>
			<a href="<%=request.getContextPath()%>/employee/employeeList.jsp" class="btn btn-sm btn-outline-secondary">
				๋’ค๋กœ๊ฐ€๊ธฐ
			</a>
			<button type="submit" class="btn btn-sm btn-secondary">์ถ”๊ฐ€</button>
		</form>
	<!---------------------- add form ๋ ---------------------->
</div>
</body>
</html>

๐Ÿ“ ๊ฒฐ๊ณผ


๐Ÿ“Œ addEmployeeAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "vo.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.*" %>
<%
	// ํ•œ๊ธ€ ๊นจ์ง€์ง€ ์•Š๊ฒŒ ์ธ์ฝ”๋”ฉ
	request.setCharacterEncoding("utf-8");

	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// 1-1) ์„ธ์…˜๊ฐ’
	// ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ๋ฉด ์ด ํŽ˜์ด์ง€์— ์˜ฌ ์ˆ˜ ์—†๋‹ค
	if(session.getAttribute("loginEmployee") == null) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	// 1-2) ์š”์ฒญ๊ฐ’
	// employeeId, firstName, lastName, email, phoneNumber, hireDate, jobId, salary, commissionPct, managerId, departmentId
	String msg = null;
	if(request.getParameter("employeeId") == null
			|| request.getParameter("employeeId").equals("")) {
		msg = URLEncoder.encode("employeeId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("firstName") == null
			|| request.getParameter("firstName").equals("")) {
		msg = URLEncoder.encode("firstName์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("lastName") == null
			|| request.getParameter("lastName").equals("")) {
		msg = URLEncoder.encode("lastName์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("email") == null
			|| request.getParameter("email").equals("")) {
		msg = URLEncoder.encode("email์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("phoneNumber") == null
			|| request.getParameter("phoneNumber").equals("")) {
		msg = URLEncoder.encode("phoneNumber๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("hireDate") == null
			|| request.getParameter("hireDate").equals("")) {
		msg = URLEncoder.encode("hireDate๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("jobId") == null
			|| request.getParameter("jobId").equals("")) {
		msg = URLEncoder.encode("jobId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("salary") == null
			|| request.getParameter("salary").equals("")) {
		msg = URLEncoder.encode("salary๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("commissionPct") == null
			|| request.getParameter("commissionPct").equals("")) {
		msg = URLEncoder.encode("commissionPct๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("managerId") == null
			|| request.getParameter("managerId").equals("")) {
		msg = URLEncoder.encode("managerId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("departmentId") == null
			|| request.getParameter("departmentId").equals("")) {
		msg = URLEncoder.encode("departmentId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	}
	// null์ด๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์ด๋ฉด msg์™€ ํ•จ๊ป˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(msg != null) {
		response.sendRedirect(request.getContextPath() + "/employee/addEmployee.jsp?msg=" + msg);
		return;
	}

	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// 2-1) ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2) employeeId ์ค‘๋ณต๊ฒ€์‚ฌ
	// employee_id๊ฐ€ ๊ธฐ๋ณธํ‚ค์ด๋ฏ€๋กœ ๋จผ์ € ์ค‘๋ณต๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ณธ๋‹ค
	int employeeId = Integer.parseInt(request.getParameter("employeeId"));
	
	String employeeIdCntSql = "SELECT count(*) FROM employees WHERE employee_id = ?";
	PreparedStatement employeeIdCntStmt = conn.prepareStatement(employeeIdCntSql);
	employeeIdCntStmt.setInt(1, employeeId);
	ResultSet employeeIdCntRs = employeeIdCntStmt.executeQuery();
	
	// ๊ฐฏ์ˆ˜ ํ™•์ธ
	int employeeIdCnt = 0;
	if(employeeIdCntRs.next()) {
		employeeIdCnt = employeeIdCntRs.getInt("count(*)");
		// ํ•ด๋‹น employeeId์˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ์ €์žฅ
		// 0์ผ ๊ฒฝ์šฐ ์ค‘๋ณต ์—†์Œ 
	}
	
	// 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์ค‘๋ณต ์žˆ์Œ // msg์™€ ํ•จ๊ป˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(employeeIdCnt > 0) {
		System.out.println(employeeIdCnt + " <- addEmployeeAction ์ค‘๋ณต๋œ ์•„์ด๋”” ๊ฐฏ์ˆ˜");
		msg = URLEncoder.encode("์ค‘๋ณต๋œ employeeId์ž…๋‹ˆ๋‹ค ", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/addEmployee.jsp?msg=" + msg);
		return;
	} else {
		System.out.println("addEmployeeAction ์ค‘๋ณต๋œ ์•„์ด๋”” ์—†์Œ");
	}
	
	// 2-3) email ์ค‘๋ณต๊ฒ€์‚ฌ
	// email์ด ์œ ๋‹ˆํฌํ‚ค์ด๋ฏ€๋กœ ์ค‘๋ณต๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ณธ๋‹ค
	String email = request.getParameter("email");
	
	String emailCntSql = "SELECT count(*) FROM employees WHERE email = ?";
	PreparedStatement emailCntStmt = conn.prepareStatement(emailCntSql);
	emailCntStmt.setString(1, email);
	ResultSet emailCntRs = emailCntStmt.executeQuery();
	
	// ๊ฐฏ์ˆ˜ ํ™•์ธ
	int emailCnt = 0;
	if(emailCntRs.next()) {
		emailCnt = emailCntRs.getInt("count(*)");
		// ํ•ด๋‹น email์˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ์ €์žฅ
		// 0์ผ ๊ฒฝ์šฐ ์ค‘๋ณต ์—†์Œ 
	}
	
	// 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์ค‘๋ณต ์žˆ์Œ // msg์™€ ํ•จ๊ป˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(emailCnt > 0) {
		System.out.println(emailCnt + " <- addEmployeeAction ์ค‘๋ณต๋œ ์ด๋ฉ”์ผ ๊ฐฏ์ˆ˜");
		msg = URLEncoder.encode("์ค‘๋ณต๋œ email์ž…๋‹ˆ๋‹ค ", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/addEmployee.jsp?msg=" + msg);
		return;
	} else {
		System.out.println("addEmployeeAction ์ค‘๋ณต๋œ ์ด๋ฉ”์ผ ์—†์Œ");
	}
	
	// ์ค‘๋ณต ์—†์œผ๋ฉด ๋‚˜๋จธ์ง€ ๊ฐ’๋„ ์ €์žฅ
	String firstName = request.getParameter("firstName");
	String lastName = request.getParameter("lastName");
	String phoneNumber = request.getParameter("phoneNumber");
	String hireDate = request.getParameter("hireDate");
	String jobId = request.getParameter("jobId");
	double salary = Double.parseDouble(request.getParameter("salary")); // ๋”๋ธ” ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜
	double commissionPct = Double.parseDouble(request.getParameter("commissionPct")); // ๋”๋ธ” ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜
	int managerId = Integer.parseInt(request.getParameter("managerId"));
	int departmentId = Integer.parseInt(request.getParameter("departmentId"));
	
	// 2-3) ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "INSERT INTO employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setInt(1, employeeId);
	stmt.setString(2, firstName);
	stmt.setString(3, lastName);
	stmt.setString(4, email);
	stmt.setString(5, phoneNumber);
	stmt.setString(6, hireDate);
	stmt.setString(7, jobId);
	stmt.setDouble(8, salary);
	stmt.setDouble(9, commissionPct);
	stmt.setInt(10, managerId);
	stmt.setInt(11, departmentId);
	
	// 2-3) ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
	int row = stmt.executeUpdate();
	if(row == 1) { // ์„ฑ๊ณต์‹œ
		System.out.println(row + " <- addEmployeeAction ์„ฑ๊ณต");
		msg = URLEncoder.encode("์ •์ƒ์ ์œผ๋กœ ์ถ”๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp?msg=" + msg);
		return;
	} else { // ์‹คํŒจ์‹œ
		System.out.println(row + " <- addEmployeeAction ์‹คํŒจ");
		msg = URLEncoder.encode("์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/addEmployee.jsp?msg=" + msg);
		return;
	}
%>

๐Ÿ“Œ modifryEmployee.jsp

๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="vo.*" %>
<%@ page import="java.sql.*" %>
<%
	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ์„ธ์…˜์ •๋ณด๊ฐ€ ์—†๊ฑฐ๋‚˜ employeeId ๊ฐ’์ด ์—†์œผ๋ฉด ์ด ํŽ˜์ด์ง€์— ์˜ฌ ์ˆ˜ ์—†๋‹ค
	if(session.getAttribute("loginEmployee") == null
			|| request.getParameter("employeeId") == null
			|| request.getParameter("employeeId").equals("")) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	int paramEmployeeId = Integer.parseInt(request.getParameter("employeeId"));
	
	// ์„ธ์…˜์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
	Object o = session.getAttribute("loginEmployee");
	Employee sessionEmployee = null;
	if(o instanceof Employee) { // instanceof์—ฐ์‚ฐ์ž : ๊ฐ์ฒด๋ณ€์ˆ˜ instanceof ํƒ€์ž…
		sessionEmployee = (Employee)o;
	}
	int sessionEmployeeId = sessionEmployee.getEmployeeId();
	
	// employeeId๊ฐ’๊ณผ ์„ธ์…˜์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
	if(paramEmployeeId != sessionEmployeeId) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-1) ์ˆ˜์ • ์ „ ์ž…๋ ฅ๊ฐ’ ์กฐํšŒ๋ฅผ ์œ„ํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ
	// SELECT * FROM employees WHERE employee_Id = ?
	String sql = "SELECT employee_id employeeId, first_name firstName, last_name lastName, email email, phone_number phoneNumber, hire_date hireDate, job_id jobId, Salary salary, commission_pct commissionPct, manager_id managerId, department_id departmentId FROM employees WHERE employee_id = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setInt(1, paramEmployeeId);
	ResultSet rs = stmt.executeQuery();
	
	// Voํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
	Employee employee = null;
	if(rs.next()) {
		employee = new Employee();
		employee.setEmployeeId(rs.getInt("employeeId"));
		employee.setFirstName(rs.getString("firstName"));
		employee.setLastName(rs.getString("lastName"));
		employee.setEmail(rs.getString("email"));
		employee.setPhoneNumber(rs.getString("phoneNumber"));
		employee.setHireDate(rs.getString("hireDate"));
		employee.setJobId(rs.getString("jobId"));
		employee.setSalary(rs.getDouble("salary"));
		employee.setCommissionPct(rs.getDouble("commissionPct"));
		employee.setManagerId(rs.getInt("managerId"));
		employee.setDepartmentId(rs.getInt("departmentId"));
	}
	
	// 2-2) ์™ธ๋ž˜ํ‚ค ์นผ๋Ÿผ ์กฐํšŒ๋ฅผ ์œ„ํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ
	// JOBS
	String jobSql = "SELECT job_id jobId FROM JOBS";
	PreparedStatement jodStmt = conn.prepareStatement(jobSql);
	ResultSet jodRs = jodStmt.executeQuery();
	// DEPARTMENTS
	String departmentSql = "SELECT department_id deptId FROM DEPARTMENTS";
	PreparedStatement departmentStmt = conn.prepareStatement(departmentSql);
	ResultSet departmentRs = departmentStmt.executeQuery();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>modifyEmployee.jsp</title>
	<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<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>
<!-- include ํŽ˜์ด์ง€ : ๋ฉ”์ธ๋ฉ”๋‰ด(๊ฐ€๋กœ) -->	
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->	

<div class="container mt-5">
	<!---------------------- modify form ์‹œ์ž‘ ---------------------->
	<h3>์ •๋ณด ์ˆ˜์ •</h3>
		<!-- ์‹คํŒจ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
		<div class="text-danger">
			<%
				if(request.getParameter("msg") != null) {
			%>
					<%=request.getParameter("msg")%>
			<%
				}
			%>
		</div>
		<form action="<%=request.getContextPath()%>/employee/modifyEmployeeAction.jsp" method="post">
			<table class="table table-bordered">
				<tr>
					<th class="table-secondary">employeeId</th>
					<td>
						<input type="number" name="employeeId" value="<%=employee.getEmployeeId()%>" readonly>
						<!-- ๊ธฐ๋ณธํ‚ค์ด๋ฏ€๋กœ ์ˆ˜์ •๋ถˆ๊ฐ€(readonly) -->
					</td>
				</tr>
				<tr>
					<th class="table-secondary">firstName</th>
					<td>
						<input type="text" name="firstName" value="<%=employee.getFirstName()%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">lastName</th>
					<td>
						<input type="text" name="lastName" value="<%=employee.getLastName()%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">email</th>
					<td>
						<input type="text" name="email" value="<%=employee.getEmail()%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">phoneNumber</th>
					<td>
						<input type="text" name="phoneNumber" value="<%=employee.getPhoneNumber()%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">hireDate</th>
					<td>
						<input type="date" name="hireDate" value="<%=employee.getHireDate().substring(0,10)%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">jobId</th>
					<td>
						<select name="jobId">
							<%
								while(jodRs.next()) {
							%>
								<option value="<%=jodRs.getString("jobId")%>" <%if(jodRs.getString("jobId").equals(employee.getJobId())) {%> selected <%}%>>
									<%=jodRs.getString("jobId")%>
								</option>
							<%
								}
							%>
						</select>
					</td>
				</tr>
				<tr>
					<th class="table-secondary">salary</th>
					<td>
						<input type="number" name="salary" value="<%=employee.getSalary()%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">commissionPct</th>
					<td>
						<input type="number" name="commissionPct" value="<%=employee.getCommissionPct()%>" step="0.01" max="0.99" placeholder="๋ฒ”์œ„: 1๋ฏธ๋งŒ">
						<!-- ์†Œ์ˆซ์  ์ž…๋ ฅ ํ—ˆ์šฉ, ์ž…๋ ฅ ๋ฒ”์œ„ 1๋ฏธ๋งŒ์œผ๋กœ ์ œํ•œํ•˜๊ธฐ -->
					</td>
				</tr>
				<tr>
					<th class="table-secondary">managerId</th>
					<td>
						<input type="number" name="managerId" value="<%=employee.getManagerId()%>">
					</td>
				</tr>
				<tr>
					<th class="table-secondary">departmentId</th>
					<td>
						<select name="departmentId">
							<%
								while(departmentRs.next()) {
							%>
								<option value="<%=departmentRs.getInt("deptId")%>" <%if(departmentRs.getInt("deptId") == employee.getDepartmentId()) {%> selected <%}%>>
									<%=departmentRs.getInt("deptId")%>
								</option>
							<%
								}
							%>
						</select>
					</td>
				</tr>
			</table>
			<a href="<%=request.getContextPath()%>/employee/employeeList.jsp" class="btn btn-sm btn-outline-secondary">
				๋’ค๋กœ๊ฐ€๊ธฐ
			</a>
			<button type="submit" class="btn btn-sm btn-secondary">์ˆ˜์ •</button>
		</form>
	<!---------------------- modify form ๋ ---------------------->
</div>
</body>
</html>

๐Ÿ“ ๊ฒฐ๊ณผ


๐Ÿ“Œ modifyEmployeeAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "vo.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.*" %>
<%
	// ํ•œ๊ธ€ ๊นจ์ง€์ง€ ์•Š๊ฒŒ ์ธ์ฝ”๋”ฉ
	request.setCharacterEncoding("utf-8");

	//1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ์„ธ์…˜์ •๋ณด๊ฐ€ ์—†๊ฑฐ๋‚˜ employeeId ๊ฐ’์ด ์—†์œผ๋ฉด ์ด ํŽ˜์ด์ง€์— ์˜ฌ ์ˆ˜ ์—†๋‹ค
	if(session.getAttribute("loginEmployee") == null
			|| request.getParameter("employeeId") == null
			|| request.getParameter("employeeId").equals("")) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	int paramEmployeeId = Integer.parseInt(request.getParameter("employeeId"));
	
	// ์„ธ์…˜์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
	Object o = session.getAttribute("loginEmployee");
	Employee sessionEmployee = null;
	if(o instanceof Employee) { // instanceof์—ฐ์‚ฐ์ž : ๊ฐ์ฒด๋ณ€์ˆ˜ instanceof ํƒ€์ž…
		sessionEmployee = (Employee)o;
	}
	int sessionEmployeeId = sessionEmployee.getEmployeeId();
	
	// employeeId๊ฐ’๊ณผ ์„ธ์…˜์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
	if(paramEmployeeId != sessionEmployeeId) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	
	// ์š”์ฒญ๊ฐ’
	// firstName, lastName, email, phoneNumber, hireDate, jobId, salary, commissionPct, managerId, departmentId
	String msg = null;
	if(request.getParameter("firstName") == null
			|| request.getParameter("firstName").equals("")) {
		msg = URLEncoder.encode("firstName์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("lastName") == null
			|| request.getParameter("lastName").equals("")) {
		msg = URLEncoder.encode("lastName์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("email") == null
			|| request.getParameter("email").equals("")) {
		msg = URLEncoder.encode("email์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("phoneNumber") == null
			|| request.getParameter("phoneNumber").equals("")) {
		msg = URLEncoder.encode("phoneNumber๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("hireDate") == null
			|| request.getParameter("hireDate").equals("")) {
		msg = URLEncoder.encode("hireDate๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("jobId") == null
			|| request.getParameter("jobId").equals("")) {
		msg = URLEncoder.encode("jobId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("salary") == null
			|| request.getParameter("salary").equals("")) {
		msg = URLEncoder.encode("salary๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("commissionPct") == null
			|| request.getParameter("commissionPct").equals("")) {
		msg = URLEncoder.encode("commissionPct๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("managerId") == null
			|| request.getParameter("managerId").equals("")) {
		msg = URLEncoder.encode("managerId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	} else if(request.getParameter("departmentId") == null
			|| request.getParameter("departmentId").equals("")) {
		msg = URLEncoder.encode("departmentId๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", "utf-8");
	}
	// null์ด๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์ด๋ฉด msg์™€ ํ•จ๊ป˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(msg != null) {
		response.sendRedirect(request.getContextPath() + "/employee/modifyEmployee.jsp?employeeId=" + paramEmployeeId + "&msg=" + msg);
		return;
	}

	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// 2-1) ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2) email ์ค‘๋ณต๊ฒ€์‚ฌ
	// email์ด ์œ ๋‹ˆํฌํ‚ค์ด๋ฏ€๋กœ ์ค‘๋ณต๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ณธ๋‹ค
	String email = request.getParameter("email");
	// ๊ธฐ์กด ์ž…๋ ฅ ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  ์กฐํšŒํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— WHERE์ ˆ์— employee_id๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€
	String emailCntSql = "SELECT count(*) FROM employees WHERE email = ? AND employee_id != ?";
	PreparedStatement emailCntStmt = conn.prepareStatement(emailCntSql);
	emailCntStmt.setString(1, email);
	emailCntStmt.setInt(2, paramEmployeeId);
	ResultSet emailCntRs = emailCntStmt.executeQuery();
	
	// ๊ฐฏ์ˆ˜ ํ™•์ธ
	int emailCnt = 0;
	if(emailCntRs.next()) {
		emailCnt = emailCntRs.getInt("count(*)");
		// ํ•ด๋‹น email์˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ์ €์žฅ
		// 0์ผ ๊ฒฝ์šฐ ์ค‘๋ณต ์—†์Œ 
	}
	
	// 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์ค‘๋ณต ์žˆ์Œ // msg์™€ ํ•จ๊ป˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(emailCnt > 0) {
		System.out.println(emailCnt + " <- modifyEmployeeAction ์ค‘๋ณต๋œ ์ด๋ฉ”์ผ ๊ฐฏ์ˆ˜");
		msg = URLEncoder.encode("์ค‘๋ณต๋œ email์ž…๋‹ˆ๋‹ค ", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/modifyEmployee.jsp?employeeId=" + paramEmployeeId + "&msg=" + msg);
		return;
	} else {
		System.out.println("modifyEmployeeAction ์ค‘๋ณต๋œ ์ด๋ฉ”์ผ ์—†์Œ");
	}
	
	// ์ค‘๋ณต ์—†์œผ๋ฉด ๋‚˜๋จธ์ง€ ๊ฐ’๋„ ์ €์žฅ
	String firstName = request.getParameter("firstName");
	String lastName = request.getParameter("lastName");
	String phoneNumber = request.getParameter("phoneNumber");
	String hireDate = request.getParameter("hireDate");
	String jobId = request.getParameter("jobId");
	double salary = Double.parseDouble(request.getParameter("salary")); // ๋”๋ธ” ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜
	double commissionPct = Double.parseDouble(request.getParameter("commissionPct")); // ๋”๋ธ” ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜
	int managerId = Integer.parseInt(request.getParameter("managerId"));
	int departmentId = Integer.parseInt(request.getParameter("departmentId"));
	
	// 2-3) ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "UPDATE employees SET first_name = ?, last_name = ?, email = ?, phone_number = ?, hire_date = ?, job_id = ?, salary = ?, commission_pct = ?, manager_id = ?, department_id = ? WHERE employee_id = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, firstName);
	stmt.setString(2, lastName);
	stmt.setString(3, email);
	stmt.setString(4, phoneNumber);
	stmt.setString(5, hireDate);
	stmt.setString(6, jobId);
	stmt.setDouble(7, salary);
	stmt.setDouble(8, commissionPct);
	stmt.setInt(9, managerId);
	stmt.setInt(10, departmentId);
	stmt.setInt(11, paramEmployeeId);
	
	// 2-3) ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
	int row = stmt.executeUpdate();
	if(row == 1) { // ์„ฑ๊ณต์‹œ
		System.out.println(row + " <- modifyEmployeeAction ์„ฑ๊ณต");
		msg = URLEncoder.encode("์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ • ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp?msg=" + msg);
		return;
	} else { // ์‹คํŒจ์‹œ
		System.out.println(row + " <- modifyEmployeeAction ์‹คํŒจ");
		msg = URLEncoder.encode("์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/modifyEmployee.jsp?employeeId=" + paramEmployeeId + "&msg=" + msg);
		return;
	}
%>
  • email ์ค‘๋ณต ๊ฒ€์‚ฌ ์‹œ, ์ˆ˜์ •์„ ์•ˆํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์ž…๋ ฅ๊ฐ’์€ ์ œ์™ธํ•˜๊ณ  selectํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ where์ ˆ์— SELECT count(*) FROM employees WHERE email = ? AND employee_id != ? ์„ ์ถ”๊ฐ€ํ•œ๋‹ค!

๐Ÿ“Œ removeEmployeeAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "vo.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.*" %>
<%
	//1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ์„ธ์…˜์ •๋ณด๊ฐ€ ์—†๊ฑฐ๋‚˜ employeeId ๊ฐ’์ด ์—†์œผ๋ฉด ์ด ํŽ˜์ด์ง€์— ์˜ฌ ์ˆ˜ ์—†๋‹ค
	if(session.getAttribute("loginEmployee") == null
			|| request.getParameter("employeeId") == null
			|| request.getParameter("employeeId").equals("")) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	int paramEmployeeId = Integer.parseInt(request.getParameter("employeeId"));
	
	// ์„ธ์…˜์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
	Object o = session.getAttribute("loginEmployee");
	Employee sessionEmployee = null;
	if(o instanceof Employee) { // instanceof์—ฐ์‚ฐ์ž : ๊ฐ์ฒด๋ณ€์ˆ˜ instanceof ํƒ€์ž…
		sessionEmployee = (Employee)o;
	}
	int sessionEmployeeId = sessionEmployee.getEmployeeId();
	
	// employeeId๊ฐ’๊ณผ ์„ธ์…˜์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
	if(paramEmployeeId != sessionEmployeeId) {
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp");
		return;
	}
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// 2-1) ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "oracle.jdbc.driver.OracleDriver";
	Class.forName(driver);
	String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
	String dbuser = "****";
	String dbpw = "****";
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2) ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "DELETE FROM employees WHERE employee_id = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setInt(1, paramEmployeeId);
	
	// 2-3) ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
	int row = stmt.executeUpdate();
	String msg = null;
	if(row == 1) { // ์„ฑ๊ณต์‹œ ๋กœ๊ทธ์•„์›ƒ ๋˜๋ฏ€๋กœ home์œผ๋กœ
		System.out.println(row + " <- removeEmployeeAction ์„ฑ๊ณต");
		session.invalidate(); // ์‚ฌ์›์ •๋ณด๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์œผ๋ฏ€๋กœ ์„ธ์…˜ ์ดˆ๊ธฐํ™”
		msg = URLEncoder.encode("์ •์ƒ์ ์œผ๋กœ ์‚ญ์ œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/home.jsp?msg=" + msg);
		return;
	} else { // ์‹คํŒจ์‹œ msg์™€ ํ•จ๊ป˜ list๋กœ
		System.out.println(row + " <- removeEmployeeAction ์‹คํŒจ");
		msg = URLEncoder.encode("์‚ญ์ œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”", "utf-8");
		response.sendRedirect(request.getContextPath() + "/employee/employeeList.jsp?msg=" + msg);
		return;
	}
%>



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

delete from job_history
commit;

alter TRIGGER HR.UPDATE_JOB_HISTORY disable;

์ƒ˜ํ”Œ๋ฐ์ดํ„ฐ์— job_history, TRIGGER ๋“ฑ ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋“ค์ด ๊ฑธ๋ ค ์žˆ์–ด์„œ ์ž‘์—…ํ•˜๋ฉด์„œ ์• ๋ฅผ ๋จน์—ˆ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋‚ด๋ฉด์„œ ํŽ˜์ด์ง€๋ฅผ ์™„์„ฑํ–ˆ์„ ๋•Œ์—๋Š” ๋ฟŒ๋“ฏํ–ˆ๋‹ค!



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

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