[구디아카데미][IT국비지원]
직원 리스트에 성별, 이름, 입사년월, 입사월로 검색 기능 추가
리스트 표시 개수 선택 추가
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="vo.*" %>
<%
//System.out.print font color & bg color
final String PUPPLE = "\u001B[35m";
final String BG_CYAN = "\u001B[46m";
final String RESET = "\u001B[0m";
//request 인코딩 설정
request.setCharacterEncoding("utf-8");
// 요청값 확인
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameter("currentPage") + "<-- lastEmpList parameter currentPage"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameter("searchWord") + "<-- lastEmpList parameter searchWord"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameter("rowPerPage") + "<-- lastEmpList parameter rowPerPage"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameter("gender") + "<-- lastEmpList parameter gender"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameter("begin") + "<-- lastEmpList parameter begin"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameter("end") + "<-- lastEmpList parameter end"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+request.getParameterValues("ckMonth")+ "<-- lastEmpList parameter end"+RESET);
// 요청값 유효성 검사
// searchWord 변수 초기화
String searchWord = "";
// 요청된 searchWord 유효성 검사
if(request.getParameter("searchWord") != null) {
searchWord = request.getParameter("searchWord");
}
// 디버깅(searchWord 확인)
System.out.println(PUPPLE+" "+BG_CYAN+searchWord + "<-- lastEmpList searchWord"+RESET);
// gender 변수 초기화
String gender = "";
// 요청값 gender 유효성 검사
if(request.getParameter("gender") != null) {
gender = request.getParameter("gender");
}
// 디버깅(gender 확인)
System.out.println(PUPPLE+" "+BG_CYAN+gender + "<-- lastEmpList gender"+RESET);
// begin, end 변수 초기화
String begin = "";
String end = "";
// 요청값 begin, end 유효성 검사 // 조회 시 공백값이 넘어가기 때문에 공백도 검사
if(request.getParameter("begin") != null // begin이 null이 아니고 공백이 아니면
&& !request.getParameter("begin").equals("")) {
begin = request.getParameter("begin");
}
if(request.getParameter("end") != null // end가 null이 아니고 공백이 아니면
&& !request.getParameter("end").equals("")) {
end = request.getParameter("end");
}
// 디버깅(begin, end 확인)
System.out.println(PUPPLE+" "+BG_CYAN+begin + "<-- lastEmpList begin"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+end + "<-- lastEmpList end"+RESET);
// ckMonth
// 키가 같은 여러개의 요청값을 배열에 저장
String[] ckMonth = request.getParameterValues("ckMonth");
// int배열 선언
int[] intCkMonth = null;
// ckMonth가 null이 아니면 int배열로 변환
if(ckMonth != null) {
intCkMonth = new int[ckMonth.length];
for(int i=0; i<intCkMonth.length; i+=1) {
intCkMonth[i] = Integer.parseInt(ckMonth[i]);
}
}
//현재 페이지 변수 : 기본값 1, 요청값 없을 때 1페이지
int currentPage = 1;
// 요청된 현재 페이지 값 유효성 검사
if(request.getParameter("currentPage") != null) { // 요청된 현재 페이지 값이 null이 아니면
currentPage = Integer.parseInt(request.getParameter("currentPage")); // 요청된 현재 페이지 값을 현재 페이지 변수에 저장
}
// 디버깅(현재 페이지 확인)
System.out.println(PUPPLE+" "+BG_CYAN+currentPage + "<-- lastEmpList currentPage"+RESET);
// 페이지당 출력 행의 수 변수 : 기본값 10, 요청값 없을 때 10행
int rowPerPage = 10;
// 요청된 페이지당 출력 행의 수 값 유효성 검사
if(request.getParameter("rowPerPage") != null) { // 요청된 페이지당 출력 행의 수 값이 null이 아니면
rowPerPage = Integer.parseInt(request.getParameter("rowPerPage")); // 요청된 페이지당 출력 행의 수 값을 페이지당 출력 행의 수 변수에 저장
}
// 디버깅(페이지당 출력 행의 수)
System.out.println(PUPPLE+" "+BG_CYAN+rowPerPage + " <-- lastEmpList rowPerPage"+RESET);
// 시작 행 번호 : (현재 페이지-1) * 행의 수
int startRow = (currentPage-1) * rowPerPage;
// 디버깅(시작 행 번호 확인)
System.out.println(PUPPLE+" "+BG_CYAN+startRow + "<-- lastEmpList startRow"+RESET);
// DB 호출에 필요한 변수 생성
String driver = "org.mariadb.jdbc.Driver";
String dbUrl = "jdbc:mariadb://127.0.0.1:3306/employees";
String dbUser = "root";
String dbPw = "java1234";
// 드라이버 로딩
Class.forName(driver);
// DB 접속
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPw);
// sql 전송
// sql을 전송하기 위한 변수 선언
String sql = "";
String sql2 = "";
PreparedStatement stmt = null;
PreparedStatement stmt2 = null;
if(searchWord.equals("")) { // searchWord가 공백이고
if (gender.equals("")) { // gender가 선택되지 않았고
if(begin.equals("") && end.equals("")) { // begin와 end가 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+1, intCkMonth[i]);
stmt2.setInt(i+1, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+1,startRow);
stmt.setInt(intCkMonth.length+2,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,startRow);
stmt.setInt(2,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees";
stmt2 = conn.prepareStatement(sql2);
}
} else if(begin.equals("")) { // searchWord가 공백이고 gender가 선택되지 않았고 begin만 공백이면
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, end);
stmt2.setString(1, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+2, intCkMonth[i]);
stmt2.setInt(i+2, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+2,startRow);
stmt.setInt(intCkMonth.length+3,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') > ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, end);
stmt.setInt(2,startRow);
stmt.setInt(3,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') > ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, end);
}
} else if(end.equals("")) { // searchWord가 공백이고 gender가 선택되지 않았고 end만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, begin);
stmt2.setString(1, begin);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+2, intCkMonth[i]);
stmt2.setInt(i+2, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+2,startRow);
stmt.setInt(intCkMonth.length+3,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') > ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, begin);
stmt.setInt(2,startRow);
stmt.setInt(3,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') > ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, begin);
}
} else { // searchWord가 공백이고 gender가 선택되지 않았고 begin와 end가 공백이 아니고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, begin);
stmt.setString(2, end);
stmt2.setString(1, begin);
stmt2.setString(2, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+3, intCkMonth[i]);
stmt2.setInt(i+3, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+3,startRow);
stmt.setInt(intCkMonth.length+4,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, begin);
stmt.setString(2, end);
stmt.setInt(3,startRow);
stmt.setInt(4,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, begin);
stmt2.setString(2, end);
}
}
} else if(gender.equals("M") || gender.equals("F")) { // searchWord가 공백이고 gender가 선택되었고
if(begin.equals("") && end.equals("")) { // begin와 end가 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, gender);
stmt2.setString(1, gender);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+2, intCkMonth[i]);
stmt2.setInt(i+2, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+2,startRow);
stmt.setInt(intCkMonth.length+3,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setInt(2,startRow);
stmt.setInt(3,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, gender);
}
} else if(begin.equals("")) { // searchWord가 공백이고 gender가 선택되었고 begin만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, gender);
stmt.setString(2, end);
stmt2.setString(1, gender);
stmt2.setString(2, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+3, intCkMonth[i]);
stmt2.setInt(i+3, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+3,startRow);
stmt.setInt(intCkMonth.length+4,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, end);
stmt.setInt(3,startRow);
stmt.setInt(4,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, gender);
stmt2.setString(2, end);
}
} else if(end.equals("")) { // searchWord가 공백이고 gender가 선택되었고 end만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, gender);
stmt.setString(2, begin);
stmt2.setString(1, gender);
stmt2.setString(2, begin);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+3, intCkMonth[i]);
stmt2.setInt(i+3, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+3,startRow);
stmt.setInt(intCkMonth.length+4,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, begin);
stmt.setInt(3,startRow);
stmt.setInt(4,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, gender);
stmt2.setString(2, begin);
}
} else { // searchWord가 공백이고 gender가 선택되었고 begin와 end가 공백이 아니고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, gender);
stmt.setString(2, begin);
stmt.setString(3, end);
stmt2.setString(1, gender);
stmt2.setString(2, begin);
stmt2.setString(3, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+4, intCkMonth[i]);
stmt2.setInt(i+4, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+4,startRow);
stmt.setInt(intCkMonth.length+5,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, begin);
stmt.setString(3, end);
stmt.setInt(4,startRow);
stmt.setInt(5,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, gender);
stmt2.setString(2, begin);
stmt2.setString(3, end);
}
}
}
} else { // searchWord가 공백이 아니고
if (gender.equals("")) { // gender가 선택되지 않았고
if(begin.equals("") && end.equals("")) { // begin와 end가 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt2.setString(1, "%" + searchWord + "%");
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+2, intCkMonth[i]);
stmt2.setInt(i+2, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+2,startRow);
stmt2.setInt(intCkMonth.length+3,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, 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);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
}
} else if(begin.equals("")) { // searchWord가 공백이 아니고 gender가 선택되지 않았고 begin만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, end);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+3, intCkMonth[i]);
stmt2.setInt(i+3, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+3,startRow);
stmt2.setInt(intCkMonth.length+4,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') < ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, end);
stmt.setInt(3,startRow);
stmt.setInt(4,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') < ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, end);
}
} else if(end.equals("")) { // searchWord가 공백이 아니고 gender가 선택되지 않았고 end만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, begin);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, begin);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+3, intCkMonth[i]);
stmt2.setInt(i+3, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+3,startRow);
stmt2.setInt(intCkMonth.length+4,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') > ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, begin);
stmt.setInt(3,startRow);
stmt.setInt(4,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') > ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, begin);
}
} else { // searchWord가 공백이 아니고 gender가 선택되지 않았고 begin과 end만 공백이 아니고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, begin);
stmt.setString(3, end);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, begin);
stmt2.setString(3, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+4, intCkMonth[i]);
stmt2.setInt(i+4, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+4,startRow);
stmt2.setInt(intCkMonth.length+5,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, begin);
stmt.setString(3, end);
stmt.setInt(4,startRow);
stmt.setInt(5,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, begin);
stmt2.setString(3, end);
}
}
} else if(gender.equals("M") || gender.equals("F")) { // searchWord가 공백이 아니고 gender가 선택되었고
if(begin.equals("") && end.equals("")) { // begin와 end가 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+3, intCkMonth[i]);
stmt2.setInt(i+3, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+3,startRow);
stmt.setInt(intCkMonth.length+4,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setInt(3,startRow);
stmt.setInt(4,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
}
} else if(begin.equals("")) { // searchWord가 공백이 아니고 gender가 선택되었고 begin만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setString(3, end);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
stmt2.setString(3, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+4, intCkMonth[i]);
stmt2.setInt(i+4, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+4,startRow);
stmt.setInt(intCkMonth.length+5,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setString(3, end);
stmt.setInt(4,startRow);
stmt.setInt(5,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') < ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
stmt2.setString(3, end);
}
} else if(end.equals("")) { // searchWord가 공백이 아니고 gender가 선택되었고 end만 공백이고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setString(3, begin);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
stmt2.setString(3, begin);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+4, intCkMonth[i]);
stmt2.setInt(i+4, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+4,startRow);
stmt.setInt(intCkMonth.length+5,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setString(3, begin);
stmt.setInt(4,startRow);
stmt.setInt(5,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') > ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
stmt2.setString(3, begin);
}
} else { // searchWord가 공백이 아니고 gender가 선택되었고 begin와 end가 공백이 아니고
if(intCkMonth != null){ // intCkMonth이 null이 아니면
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? AND MONTH(hire_date) IN (";
// 배열 길이 만큼 sql에 ? 추가
for(int i=0; i< intCkMonth.length ; i += 1) {
if(i == intCkMonth.length-1) { // 마지막 ?에는 ,X
sql += "?";
sql2 += "?";
} else {
sql += "?,";
sql2 += "?,";
}
}
sql += ") LIMIT ?,?";
sql2 += ")";
stmt = conn.prepareStatement(sql);
stmt2 = conn.prepareStatement(sql2);
// ?에 값 대입
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setString(3, begin);
stmt.setString(4, end);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
stmt2.setString(3, begin);
stmt2.setString(4, end);
for(int i=0; i< intCkMonth.length ; i += 1) {
stmt.setInt(i+5, intCkMonth[i]);
stmt2.setInt(i+5, intCkMonth[i]);
}
stmt.setInt(intCkMonth.length+5,startRow);
stmt.setInt(intCkMonth.length+6,rowPerPage);
} else {
// sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ? LIMIT ?,?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%" + searchWord + "%");
stmt.setString(2, gender);
stmt.setString(3, begin);
stmt.setString(4, end);
stmt.setInt(5,startRow);
stmt.setInt(6,rowPerPage);
sql2 = "SELECT COUNT(*) FROM employees WHERE CONCAT(first_name,' ',last_name) LIKE ? AND gender=? AND DATE_FORMAT(hire_date, '%Y-%m') BETWEEN ? AND ?";
stmt2 = conn.prepareStatement(sql2);
stmt2.setString(1, "%" + searchWord + "%");
stmt2.setString(2, gender);
stmt2.setString(3, begin);
stmt2.setString(4, end);
}
}
}
}
// 전송한 sql 디버깅
System.out.println(PUPPLE+" "+BG_CYAN+stmt + " <-- lastEmpList stmt"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+stmt2 + " <-- lastEmpList stmt2"+RESET);
// sql 전송해서 실행한 결과값
ResultSet rs = stmt.executeQuery();
ResultSet rs2 = stmt2.executeQuery();
// 일반적인 자료구조모델로 변경(ResultSet --> ArrayList)
ArrayList<Employees> empList = new ArrayList<Employees>();
while(rs.next()){ // rs.next()가 가리키는 데이터가 있으면(true이면)
Employees e = new Employees(); // Employees 객체 생성
e.empNo = rs.getInt("empNo"); // rs가 가르키는 데이터를 객체에 저장
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); // 객체를 ArrayList에 추가
}
// 전체 행의 수
int totalRow = 0;
if(rs2.next()){
totalRow = rs2.getInt("count(*)");
}
// 마지막 페이지 = 전체 행의 수 / 페이지당 출력 행의 수
int lastPage = totalRow / rowPerPage;
// 전체 행의 수 / 페이지당 출력 행의 수가 나눠 떨어지지 않는다면 페이지 수 + 1
if(totalRow % rowPerPage != 0){
lastPage = lastPage + 1;
}
// 페이지 넘길 때 체크된 월을 넘기기 위한 문자열
String hrefs = "";
if(intCkMonth != null){ // intCkMonth이 null이 아니면
for(int i=0; i< intCkMonth.length ; i += 1) {
hrefs += "&ckMonth=" + intCkMonth[i];
}
}
// 변수값 디버깅
System.out.println(PUPPLE+" "+BG_CYAN+totalRow + " <-- lastEmpList totalRow"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+lastPage + " <-- lastEmpList lastPage"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+hrefs + " <-- lastEmpList hrefs"+RESET);
// 나이를 구하기 위한 현재 날짜
Calendar today = Calendar.getInstance();
int year = today.get(Calendar.YEAR);
int month = today.get(Calendar.MONTH);
int day = today.get(Calendar.DATE);
System.out.println(PUPPLE+" "+BG_CYAN+year + " <-- empListBySearch year"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+month + " <-- empListBySearch month"+RESET);
System.out.println(PUPPLE+" "+BG_CYAN+day + " <-- empListBySearch day"+RESET);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lastEmpList</title>
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
<h1>직원 리스트</h1>
<form action="./lastEmpList.jsp" method="get">
<div style="text-align: right;">
<label>성별 : </label>
<select name="gender">
<%
if(gender.equals("")) {
%>
<option value="" selected="selected">성별선택</option>
<option value="M">남</option>
<option value="F">여</option>
<%
} else if(gender.equals("M")) {
%>
<option value="">성별선택</option>
<option value="M" selected="selected">남</option>
<option value="F">여</option>
<%
} else {
%>
<option value="">성별선택</option>
<option value="M">남</option>
<option value="F" selected="selected">여</option>
<%
}
%>
</select>
<label>이름 : </label>
<input type="text" name="searchWord" value="<%=searchWord %>">
<label>입사년월 : </label>
<input type="month" name="begin" value="<%=begin %>"> -
<input type="month" name="end" value="<%=end %>">
<button type="submit">조회</button>
<br>
<label>입사월 : </label>
<%
// 1월 ~ 12월
// 체크 검사용 boolean 배열
boolean[] checked = {false, false, false, false, false, false, false, false, false, false, false, false};
int[] months = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
for(int m : months) {
if(intCkMonth != null) {
// 체크한 월이면 true 대입
for(int i : intCkMonth) {
if(i == m) {
checked[i-1] = true;
}
}
}
// ture이면 체크
if (checked[m-1] == true) {
%>
<input type="checkbox" name="ckMonth" value="<%=m%>" checked="checked"> <%=m%>월
<%
} else {
%>
<input type="checkbox" name="ckMonth" value="<%=m%>"> <%=m%>월
<%
}
}
%>
<br>
페이지당 목록
<select name="rowPerPage">
<%
if(rowPerPage == 10) {
%>
<option value="10" selected="selected">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
<%
} else if(rowPerPage == 20) {
%>
<option value="10">10</option>
<option value="20" selected="selected">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
<%
} else if(rowPerPage == 30) {
%>
<option value="10">10</option>
<option value="20">20</option>
<option value="30" selected="selected">30</option>
<option value="50">50</option>
<option value="100">100</option>
<%
} else if(rowPerPage == 50) {
%>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50" selected="selected">50</option>
<option value="100">100</option>
<%
} else {
%>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100" selected="selected">100</option>
<%
}
%>
</select>
<button type="submit">변경</button>
</div>
<table class="table table-bordered">
<tr>
<th class="table-dark">번호</th>
<th class="table-dark">생년월일</th>
<th class="table-dark">이름</th>
<th class="table-dark">성</th>
<th class="table-dark">성별</th>
<th class="table-dark">입사일</th>
</tr>
<%
for(Employees e : empList) {
%>
<tr>
<td><%=e.empNo %></td>
<%
// String birthDate를 년, 월, 일로 쪼개서 int로 변환
int birthYear = Integer.parseInt(e.birthDate.substring(0, 4));
int birthMonth = Integer.parseInt(e.birthDate.substring(5, 7));
int birthDay = Integer.parseInt(e.birthDate.substring(8));
// 나이 = 현재 년도 - 태어난 년도
int age = year - birthYear;
// 현재 월, 일이 태어난 월, 일을 지났으면 나이 + 1
if(month > birthMonth && day > birthDay) {
%>
<td><%=age + 1 %></td>
<%
} else {
%>
<td><%=age %></td>
<%
}
%>
<td><%=e.firstName %></td>
<td><%=e.lastName %></td>
<td><image src="./img/<%=e.gender %>.png" width="50" height="50"></td>
<td><%=e.hireDate %></td>
</tr>
<%
}
%>
</table>
</form>
<%
// 현재 페이지가 2 이상일 때 이전 화살표 표시
if(currentPage > 1) {
%>
<a href="./lastEmpList.jsp?currentPage=<%=currentPage-1%>&searchWord=<%=searchWord%>&rowPerPage=<%=rowPerPage%>&gender=<%=gender%>&begin=<%=begin%>&end=<%=end%><%=hrefs%>"><image src="./img/before.png"></a>
<%
}
%>
<%=currentPage%>
<%
// 현재 페이지가 마지막 페이지보다 작을 때 다음 화살표 표시
if(currentPage < lastPage){
%>
<a href="./lastEmpList.jsp?currentPage=<%=currentPage+1%>&searchWord=<%=searchWord%>&rowPerPage=<%=rowPerPage%>&gender=<%=gender%>&begin=<%=begin%>&end=<%=end%><%=hrefs%>"><image src="./img/next.png"></a>
<%
}
%>
</div>
</body>
</html>