[구디아카데미][IT국비지원]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="emp.*" %>
<%
// 현재 페이지
int currentPage = 1;
// 요청된 현재 페이지 값 유효성 검사
if(request.getParameter("currentPage") != null) { // 요청된 현재 페이지 값이 null이 아니면
currentPage = Integer.parseInt(request.getParameter("currentPage")); // 요청된 현재 페이지 값을 현재 페이지 변수에 저장
}
// 디버깅(현재 페이지 확인)
System.out.println(currentPage + "<--currentPage");
// 페이지당 출력 행의 수
int rowPerPage = 10;
// 시작 행 번호
int startRow = 0 + (currentPage-1) * rowPerPage;
//request 인코딩 설정
request.setCharacterEncoding("utf-8");
//드라이버 로딩
Class.forName("org.mariadb.jdbc.Driver");
// DB 접속
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/employees", "root", "java1234");
// employees 테이블에 startRow 번째부터 rowPerPage 개의 데이터를 조회하는 sql 전송
String sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees LIMIT ?, ?;";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, startRow); // 1번째 ? = startRow
stmt.setInt(2, rowPerPage); // 2번째 ? = rowPerPage
// 디버깅(sql 확인)
System.out.println(stmt + " <-- empList sql");
// sql을 전송한 결과값
ResultSet rs = stmt.executeQuery();
// ResultSet --> ArrayList
ArrayList<Employees> empList = new ArrayList<Employees>();
while(rs.next()){
Employees e = new Employees();
e.empNo = rs.getInt("empNo");
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);
}
// 마지막 페이지
// emoloyees 테이블의 데이터의 개수(행의 수)를 구하는 sql 전송
String sql2 = "SELECT count(*) FROM employees";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
// sql을 전송한 결과 값
ResultSet rs2 = stmt2.executeQuery();
// 전체 행의 수
int totalRow = 0;
if(rs2.next()){
totalRow = rs2.getInt("count(*)");
}
// 마지막 페이지 = 전체 행의 수 / 페이지당 출력 행의 수
int lastPage = totalRow / rowPerPage;
// 전체 행의 수 / 페이지당 출력 행의 수가 나눠 떨어지지 않는다면 페이지 수 + 1
if(totalRow % rowPerPage != 0){
lastPage = lastPage + 1;
}
// 현재 날짜
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(year + " <-- empList year");
System.out.println(month + " <-- empList month");
System.out.println(day + " <-- empList day");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empList</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="" method="post">
<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="./empList.jsp?currentPage=<%=currentPage-1%>"><image src="./img/왼쪽화살표.png"></a>
<%
}
%>
<%=currentPage%>
<%
// 현재 페이지가 마지막 페이지보다 작을 때 다음 화살표 표시
if(currentPage < lastPage){
%>
<a href="./empList.jsp?currentPage=<%=currentPage+1%>"><image src="./img/오른쪽화살표.png"></a>
<%
}
%>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="vo.*" %>
<%
// 현재 페이지
int currentPage = 1;
// 요청된 현재 페이지 값 유효성 검사
if(request.getParameter("currentPage") != null) { // 요청된 현재 페이지 값이 null이 아니면
currentPage = Integer.parseInt(request.getParameter("currentPage")); // 요청된 현재 페이지 값을 현재 페이지 변수에 저장
}
// 디버깅(현재 페이지 확인)
System.out.println(currentPage + "<--currentPage");
// 페이지당 출력 행의 수
int rowPerPage = 10;
// 시작 행 번호
int startRow = 0 + (currentPage-1) * rowPerPage;
//request 인코딩 설정
request.setCharacterEncoding("utf-8");
//드라이버 로딩
Class.forName("org.mariadb.jdbc.Driver");
// DB 접속
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/employees", "root", "java1234");
// 정렬하기
String col = "emp_no";
String ascDesc = "ASC";
if(request.getParameter("col") != null
&& request.getParameter("ascDesc") != null) {
col = request.getParameter("col");
ascDesc = request.getParameter("ascDesc");
}
// employees 테이블에 startRow 번째부터 rowPerPage 개의 데이터를 조회하는 sql 전송
String sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees ORDER BY " + col + " " + ascDesc +" LIMIT ?, ?;";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, startRow); // 1번째 ? = startRow
stmt.setInt(2, rowPerPage); // 2번째 ? = rowPerPage
// 디버깅(sql 확인)
System.out.println(stmt + " <-- empList sql");
// sql을 전송한 결과값
ResultSet rs = stmt.executeQuery();
// ResultSet --> ArrayList
ArrayList<Employees> empList = new ArrayList<Employees>();
while(rs.next()){
Employees e = new Employees();
e.empNo = rs.getInt("empNo");
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);
}
// 마지막 페이지
// emoloyees 테이블의 데이터의 개수(행의 수)를 구하는 sql 전송
String sql2 = "SELECT count(*) FROM employees";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
// sql을 전송한 결과 값
ResultSet rs2 = stmt2.executeQuery();
// 전체 행의 수
int totalRow = 0;
if(rs2.next()){
totalRow = rs2.getInt("count(*)");
}
// 마지막 페이지 = 전체 행의 수 / 페이지당 출력 행의 수
int lastPage = totalRow / rowPerPage;
// 전체 행의 수 / 페이지당 출력 행의 수가 나눠 떨어지지 않는다면 페이지 수 + 1
if(totalRow % rowPerPage != 0){
lastPage = lastPage + 1;
}
// 현재 날짜
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(year + " <-- empList year");
System.out.println(month + " <-- empList month");
System.out.println(day + " <-- empList day");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empList</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="" method="post">
<table class="table table-bordered">
<tr>
<th class="table-dark">
번호
<a href="./empList.jsp?col=emp_no&ascDesc=ASC"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList.jsp?col=emp_no&ascDesc=DESC"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</th>
<th class="table-dark">
나이
<a href="./empList.jsp?col=birth_date&ascDesc=DESC"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList.jsp?col=birth_date&ascDesc=ASC"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</th>
<th class="table-dark">
이름
<a href="./empList.jsp?col=first_name&ascDesc=ASC"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList.jsp?col=first_name&ascDesc=DESC"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</th>
<th class="table-dark">
성
<a href="./empList.jsp?col=last_name&ascDesc=ASC"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList.jsp?col=last_name&ascDesc=DESC"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</th>
<th class="table-dark">
성별
<a href="./empList.jsp?col=gender&ascDesc=ASC"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList.jsp?col=gender&ascDesc=DESC"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</th>
<th class="table-dark">
고용일
<a href="./empList.jsp?col=hire_Date&ascDesc=ASC"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList.jsp?col=hire_Date&ascDesc=DESC"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</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="./empList.jsp?currentPage=<%=currentPage-1%>&col=<%=col%>&ascDesc=<%=ascDesc%>"><image src="./img/왼쪽화살표.png"></a>
<%
}
%>
<%=currentPage%>
<%
// 현재 페이지가 마지막 페이지보다 작을 때 다음 화살표 표시
if(currentPage < lastPage){
%>
<a href="./empList.jsp?currentPage=<%=currentPage+1%>&col=<%=col%>&ascDesc=<%=ascDesc%>"><image src="./img/오른쪽화살표.png"></a>
<%
}
%>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="vo.*" %>
<%
// 현재 페이지
int currentPage = 1;
// 요청된 현재 페이지 값 유효성 검사
if(request.getParameter("currentPage") != null) { // 요청된 현재 페이지 값이 null이 아니면
currentPage = Integer.parseInt(request.getParameter("currentPage")); // 요청된 현재 페이지 값을 현재 페이지 변수에 저장
}
// 디버깅(현재 페이지 확인)
System.out.println(currentPage + "<--currentPage");
// 페이지당 출력 행의 수
int rowPerPage = 10;
// 시작 행 번호
int startRow = 0 + (currentPage-1) * rowPerPage;
// 요청값 gender 유효성 검사
String gender = "";
if(request.getParameter("gender") != null) {
gender = request.getParameter("gender");
}
//request 인코딩 설정
request.setCharacterEncoding("utf-8");
//드라이버 로딩
Class.forName("org.mariadb.jdbc.Driver");
// DB 접속
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/employees", "root", "java1234");
String sql = null;
PreparedStatement stmt = null;
// 성별로 검색하기
if (gender.equals("")) { // 성별을 선택하지 않으면
// employees 테이블에 startRow 번째부터 rowPerPage 개의 데이터를 조회하는 sql 전송
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); // 1번째 ? = startRow
stmt.setInt(2, rowPerPage); // 2번째 ? = rowPerPage
} else if(gender.equals("M") || gender.equals("F")) { // 성별을 선택하면
// employees 테이블에 gender와 성별이 같은 startRow 번째부터 rowPerPage 개의 데이터를 조회하는 sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees WHERE gender=? LIMIT ?, ?;";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender); // 1번째 ? = gender
stmt.setInt(2, startRow); // 2번째 ? = startRow
stmt.setInt(3, rowPerPage); // 3번째 ? = rowPerPage
}
// 디버깅(sql 확인)
System.out.println(stmt + " <-- empList sql");
// sql을 전송한 결과값
ResultSet rs = stmt.executeQuery();
// ResultSet --> ArrayList
ArrayList<Employees> empList = new ArrayList<Employees>();
while(rs.next()){
Employees e = new Employees();
e.empNo = rs.getInt("empNo");
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);
}
// 마지막 페이지
// emoloyees 테이블의 데이터의 개수(행의 수)를 구하는 sql 전송
String sql2 = "SELECT count(*) FROM employees";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
// sql을 전송한 결과 값
ResultSet rs2 = stmt2.executeQuery();
// 전체 행의 수
int totalRow = 0;
if(rs2.next()){
totalRow = rs2.getInt("count(*)");
}
// 마지막 페이지 = 전체 행의 수 / 페이지당 출력 행의 수
int lastPage = totalRow / rowPerPage;
// 전체 행의 수 / 페이지당 출력 행의 수가 나눠 떨어지지 않는다면 페이지 수 + 1
if(totalRow % rowPerPage != 0){
lastPage = lastPage + 1;
}
// 현재 날짜
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(year + " <-- empList year");
System.out.println(month + " <-- empList month");
System.out.println(day + " <-- empList day");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empList</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="./empList2.jsp" method="get">
<div class="row">
<div class="col-sm-10"></div>
<div class="col-sm-2" style="text-align: right;">
<select name="gender">
<option value="">성별선택</option>
<option value="M">남</option>
<option value="F">여</option>
</select>
<button type="submit">성별선택</button>
</div>
</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="./empList2.jsp?currentPage=<%=currentPage-1%>&gender=<%=gender %>"><image src="./img/왼쪽화살표.png"></a>
<%
}
%>
<%=currentPage%>
<%
// 현재 페이지가 마지막 페이지보다 작을 때 다음 화살표 표시
if(currentPage < lastPage){
%>
<a href="./empList2.jsp?currentPage=<%=currentPage+1%>&gender=<%=gender %>"><image src="./img/오른쪽화살표.png"></a>
<%
}
%>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="vo.*" %>
<%
// 현재 페이지
int currentPage = 1;
// 요청된 현재 페이지 값 유효성 검사
if(request.getParameter("currentPage") != null) { // 요청된 현재 페이지 값이 null이 아니면
currentPage = Integer.parseInt(request.getParameter("currentPage")); // 요청된 현재 페이지 값을 현재 페이지 변수에 저장
}
// 디버깅(현재 페이지 확인)
System.out.println(currentPage + "<--currentPage");
// 페이지당 출력 행의 수
int rowPerPage = 10;
// 시작 행 번호
int startRow = 0 + (currentPage-1) * rowPerPage;
// 요청값 gender 유효성 검사
String gender = "";
if(request.getParameter("gender") != null) {
gender = request.getParameter("gender");
}
//request 인코딩 설정
request.setCharacterEncoding("utf-8");
//드라이버 로딩
Class.forName("org.mariadb.jdbc.Driver");
// DB 접속
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/employees", "root", "java1234");
String sql = null;
PreparedStatement stmt = null;
// 열별로 정렬하기 위한 변수
String col = "emp_no";
String ascDesc = "ASC";
// 정렬 및 성별 검색
if (gender.equals("")) { // 성별을 선택하지 않았고
if(request.getParameter("col") != null // 정렬을 선택했다면
&& request.getParameter("ascDesc") != null) {
col = request.getParameter("col");
ascDesc = request.getParameter("ascDesc");
// employees 테이블에 startRow 번째부터 rowPerPage 개의 데이터를 정렬하여 조회하는 sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees ORDER BY " + col + " " + ascDesc +" LIMIT ?, ?;";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, startRow); // 1번째 ? = startRow
stmt.setInt(2, rowPerPage); // 2번째 ? = rowPerPage
} else { // 정렬은 선택하지 않았다면
// employees 테이블에 startRow 번째부터 rowPerPage 개의 데이터를 조회하는 sql 전송
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); // 1번째 ? = startRow
stmt.setInt(2, rowPerPage); // 2번째 ? = rowPerPage
}
} else if(gender.equals("M") || gender.equals("F")) { // 성별을 선택하고
if(request.getParameter("col") != null // 정렬을 선택했다면
&& request.getParameter("ascDesc") != null) {
col = request.getParameter("col");
ascDesc = request.getParameter("ascDesc");
// employees 테이블에 gender와 성별이 같은 startRow 번째부터 rowPerPage 개의 데이터를 정렬하여 조회하는 sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees WHERE gender=? ORDER BY " + col + " " + ascDesc +" LIMIT ?, ?;";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender); // 1번째 ? = gender
stmt.setInt(2, startRow); // 2번째 ? = startRow
stmt.setInt(3, rowPerPage); // 3번째 ? = rowPerPage
} else { // 정렬은 선택하지 않았다면
// employees 테이블에 gender와 성별이 같은 startRow 번째부터 rowPerPage 개의 데이터를 조회하는 sql 전송
sql = "SELECT emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate FROM employees WHERE gender=? LIMIT ?, ?;";
stmt = conn.prepareStatement(sql);
stmt.setString(1, gender); // 1번째 ? = gender
stmt.setInt(2, startRow); // 2번째 ? = startRow
stmt.setInt(3, rowPerPage); // 3번째 ? = rowPerPage
}
}
// 디버깅(sql 확인)
System.out.println(stmt + " <-- empList sql");
// sql을 전송한 결과값
ResultSet rs = stmt.executeQuery();
// ResultSet --> ArrayList
ArrayList<Employees> empList = new ArrayList<Employees>();
while(rs.next()){
Employees e = new Employees();
e.empNo = rs.getInt("empNo");
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);
}
// 마지막 페이지
// emoloyees 테이블의 데이터의 개수(행의 수)를 구하는 sql 전송
String sql2 = "SELECT count(*) FROM employees";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
// sql을 전송한 결과 값
ResultSet rs2 = stmt2.executeQuery();
// 전체 행의 수
int totalRow = 0;
if(rs2.next()){
totalRow = rs2.getInt("count(*)");
}
// 마지막 페이지 = 전체 행의 수 / 페이지당 출력 행의 수
int lastPage = totalRow / rowPerPage;
// 전체 행의 수 / 페이지당 출력 행의 수가 나눠 떨어지지 않는다면 페이지 수 + 1
if(totalRow % rowPerPage != 0){
lastPage = lastPage + 1;
}
// 현재 날짜
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(year + " <-- empList year");
System.out.println(month + " <-- empList month");
System.out.println(day + " <-- empList day");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empList</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="./empList3.jsp" method="get">
<div class="row">
<div class="col-sm-10"></div>
<div class="col-sm-2" style="text-align: right;">
<select name="gender">
<option value="">성별선택</option>
<option value="M">남</option>
<option value="F">여</option>
</select>
<button type="submit">성별선택</button>
</div>
</div>
<table class="table table-bordered">
<tr>
<th class="table-dark">
<div class="row">
<div class="col-sm-8">번호</div>
<div class="col-sm-4" style="text-align: right;">
<a href="./empList3.jsp?col=emp_no&ascDesc=ASC&gender=<%=gender %>"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList3.jsp?col=emp_no&ascDesc=DESC&gender=<%=gender %>"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</div>
</div>
</th>
<th class="table-dark">
<div class="row">
<div class="col-sm-8">나이</div>
<div class="col-sm-4" style="text-align: right;">
<a href="./empList3.jsp?col=birth_date&ascDesc=DESC&gender=<%=gender %>"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList3.jsp?col=birth_date&ascDesc=ASC&gender=<%=gender %>"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</div>
</div>
</th>
<th class="table-dark">
<div class="row">
<div class="col-sm-8">이름</div>
<div class="col-sm-4" style="text-align: right;">
<a href="./empList3.jsp?col=first_name&ascDesc=ASC&gender=<%=gender %>"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList3.jsp?col=first_name&ascDesc=DESC&gender=<%=gender %>"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</div>
</div>
</th>
<th class="table-dark">
<div class="row">
<div class="col-sm-8">성</div>
<div class="col-sm-4" style="text-align: right;">
<a href="./empList3.jsp?col=last_name&ascDesc=ASC&gender=<%=gender %>"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList3.jsp?col=last_name&ascDesc=DESC&gender=<%=gender %>"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</div>
</div>
</th>
<th class="table-dark">
<div class="row">
<div class="col-sm-8">성별</div>
<div class="col-sm-4" style="text-align: right;">
<a href="./empList3.jsp?col=gender&ascDesc=ASC&gender=<%=gender %>"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList3.jsp?col=gender&ascDesc=DESC&gender=<%=gender %>"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</div>
</div>
</th>
<th class="table-dark">
<div class="row">
<div class="col-sm-8">고용일</div>
<div class="col-sm-4" style="text-align: right;">
<a href="./empList3.jsp?col=hire_Date&ascDesc=ASC&gender=<%=gender %>"><image src="./img/위쪽화살표.png" class="rounded"></a>
<a href="./empList3.jsp?col=hire_Date&ascDesc=DESC&gender=<%=gender %>"><image src="./img/아래쪽화살표.png" class="rounded"></a>
</div>
</div>
</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="./empList3.jsp?currentPage=<%=currentPage-1%>&col=<%=col%>&ascDesc=<%=ascDesc%>&gender=<%=gender %>"><image src="./img/왼쪽화살표.png"></a>
<%
}
%>
<%=currentPage%>
<%
// 현재 페이지가 마지막 페이지보다 작을 때 다음 화살표 표시
if(currentPage < lastPage){
%>
<a href="./empList3.jsp?currentPage=<%=currentPage+1%>&col=<%=col%>&ascDesc=<%=ascDesc%>&gender=<%=gender %>"><image src="./img/오른쪽화살표.png"></a>
<%
}
%>
</div>
</body>
</html>