<%
//콘솔창에 꾸미기 기능 변수 선언
final String RESET = "\u001B[0m"; // 색 리셋해주는
final String RED = "\u001B[31m"; // 글자를 레드로
final String BG_RED = "\u001B[41m"; // 글자뒤를 레드로
//요청값을 처리하는 친구들을 Controller Layer
// 현재페이지에서 주는 값을 먼저 받아와야된다. 이페이지에는 검색단어(String -- > Integer(Integer.parseInt(메소드)) -> int : 하지만 스트링은 인트로 바꿀수는 없어서 int 변수를 새로 만들어서 그 변수안에 integer로(박싱되어있는걸 박싱인지 랩핑인지 잘모르겟다 다르지만 같은 느낌인가?) 바꾸어서 넣어야된다.), 햔재페이지(int)
// 받아야되는 리퀘스트 파라미터 값이 잘 들어오는지 안들어오지는 null로 넘어오는지 유효성 체크를 해보는게 좋지 않을까? 필요하다면 받아서 확인하는 게 좋다.
System.out.println(RED+request.getParameter("currentPage")+RESET + "<-- empList par currentPage");
System.out.println(BG_RED+request.getParameter("serchWord")+RESET + "<-- empList par searchWord");
System.out.println(request.getParameter("rowPerPage") + "<-- empList par rowPerPage");
/* currentPage = null 유형성검사하기
int currentPage = 0; 기본타입은 0으로 초기화값을 넣는다 추가로 블리언타입은 false로한다
System.out.println(currentPage + "<-- empList3 currentPage");
if(request.getParameter("currentPage") != null){//만약 null이 아니라면 파미터값을 currentPage 변수안에 가져온 파라미터값을 변수안에 저장한다.
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}else {
currentPage = 1;
} else 에 있는 1을 위에 넣는다 이유는 어차피 if문이 경우의 수가 2가지 이므로 어차피 true: 파미터값 아니면 1이므로
current 변수선언할때 1로 저장한다. 처음부터 1로 저장하지말고 이런 경우의 수라면 처음 변수선언할때 코드를 줄일 수 있는지 없는지 확인하자
*/
int currentPage = 1; // 현재 페이지 int 변수를 선언하고 기본값 디폴트 값을 1로 저장함
System.out.println(currentPage + "<-- empList3 currentPage");
if(request.getParameter("currentPage") != null){//만약 null이 아니라면 파미터값을 currentPage 변수안에 가져온 파라미터값을 변수안에 저장한다.
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}
String searchWord = "" ;//널이나 공백이나 쿼리 값고 가져오는 값이 같기때문에 null이 아닌 공백으로 초기화값을 설정했다?
if(request.getParameter("searchWord") != null){
searchWord = request.getParameter("searchWord");
}
int rowPerPage = 10; ;//10개를 초기값으로 저장하겠다는 의미
if(request.getParameter("rowPerPage") != null){
rowPerPage = Integer.parseInt(request.getParameter("rowPerPage"));
}
System.out.println(RED+currentPage+RESET + "<-- empList currentPage");
System.out.println(searchWord + "<-- empList searchWord");
System.out.println(BG_RED+rowPerPage+RESET + "<-- empList rowPerPage");
// Model Layer : 모델값을 생성하기까지, 모델값: 뷰에서 출력할 내용
// controoloer layer의 결과 변수(currentPage, searchWord)의 모델을 생성하기 위해 필요한 변수를 추가 해야된다면 추가해야된다)
//controoloer layer의 결과 변수 가공하여서 새로운 변수추가
int startRow = (currentPage - 1) * rowPerPage;
// 페이지가 1일때 에는 스타트 row는 0일 나와야된다
//rowPerPage20 -> currentPage 2 -> startRow = 20
System.out.println(RED+startRow+RESET + "<-- empList3 startRow");
// 변수값을 다 구했기 때문에 이제 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);
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPw);
*/
// MariaDB 연결하기
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mariadb://127.0.0.1:3306/employees","root","java1234");
System.out.println(RED+RESET);
String gender = "";
if(request.getParameter("gender") != null){
gender = request.getParameter("gender");
}
String col = "emp_no"; //디폴트값
String ascDesc = "ASC"; // 정렬을 ASC나 Desc를 만들기위해 사용자가 birthDate의 ASC를 누르면 col은 birthDay 가 들어가고 ascDesc에는 ASC가 들어가진다 쿼리에보면 쿼리를 어떻게 적었는지 나온다.
if(request.getParameter("col") != null && request.getParameter("ascDesc") != null){
col = request.getParameter("col");
ascDesc = request.getParameter("ascDesc");
}
// 사이값구하기
/*
SELECT *
FROM employees
WHERE year(hire_date) BETWEEN 1988 AND 1990;
year(hire_date) BETWEEN ? AND ?;
*/
String beginYear="";
if(request.getParameter("beginYear") != null){
beginYear = request.getParameter("beginYear");
}
String endYear="";
if(request.getParameter("endYear") != null){
endYear = request.getParameter("endYear");
}
String sql =null;
PreparedStatement stmt =null;
/*
if(gender.equals("")){
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); // ?가 2개 들어가고
stmt.setInt(1, startRow);
stmt.setInt(2, rowPerPage);
}else {
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);
stmt.setInt(2, startRow);
stmt.setInt(3, rowPerPage);
}*/
/*
if(gender.equals("") && searchWord.equals("")){
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);
stmt.setInt(2, rowPerPage);
} else if(!gender.equals("") && searchWord.equals("")){
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);
stmt.setInt(2, startRow);
stmt.setInt(3, rowPerPage);
} else if(gender.equals("") && !searchWord.equals("")){
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where CONCAT(first_name,' ', last_name) like ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, "%"+searchWord+"%");
stmt.setInt(2, startRow);
stmt.setInt(3, rowPerPage);
} else{
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where gender = ? and CONCAT(first_name,' ', last_name) like ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, "%"+searchWord+"%");
stmt.setInt(3, startRow);
stmt.setInt(4, rowPerPage);
}
*/
if(gender.equals("") && searchWord.equals("") && (beginYear.equals("") || endYear.equals(""))){
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);
stmt.setInt(2, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리1");
} else if(!gender.equals("") && searchWord.equals("") && (beginYear.equals("") || endYear.equals(""))){
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);
stmt.setInt(2, startRow);
stmt.setInt(3, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리2");
}else if(gender.equals("") && !searchWord.equals("")&& (beginYear.equals("") || endYear.equals(""))){
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where CONCAT(first_name,' ', last_name) like ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, "%"+searchWord+"%");
stmt.setInt(2, startRow);
stmt.setInt(3, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리3");
} else if(!gender.equals("") && searchWord.equals("")&& (!beginYear.equals("") || !endYear.equals(""))){
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where gender = ? and year(hire_date) BETWEEN ? AND ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, beginYear);
stmt.setString(3, endYear);
stmt.setInt(4, startRow);
stmt.setInt(5, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리4");
}else if(gender.equals("") && !searchWord.equals("")&& (!beginYear.equals("") || !endYear.equals(""))){
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where CONCAT(first_name,' ', last_name) like ? and year(hire_date) BETWEEN ? AND ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, "%"+searchWord+"%");
stmt.setString(2, beginYear);
stmt.setString(3, endYear);
stmt.setInt(4, startRow);
stmt.setInt(5, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리5");
} else if(gender.equals("") && searchWord.equals("")&& (!beginYear.equals("") && !endYear.equals(""))){
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where year(hire_date) BETWEEN ? AND ? limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, beginYear);
stmt.setString(2, endYear);
stmt.setInt(3, startRow);
stmt.setInt(4, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리6");
} else if(!gender.equals("") && !searchWord.equals("")&& (beginYear.equals("") && endYear.equals(""))){
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where gender = ? and CONCAT(first_name,' ', last_name) like ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, "%"+searchWord+"%");
stmt.setInt(3, startRow);
stmt.setInt(4, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리7");
} else{
sql="select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender gender, hire_date hireDate from employees where gender = ? and CONCAT(first_name,' ', last_name) like ? and year(hire_date) BETWEEN ? AND ? order by "+col+" "+ascDesc+" limit ?, ?";
stmt= conn.prepareStatement(sql);
stmt.setString(1, gender);
stmt.setString(2, "%"+searchWord+"%");
stmt.setString(3, beginYear);
stmt.setString(4, endYear);
stmt.setInt(5, startRow);
stmt.setInt(6, rowPerPage);
System.out.println(RED+stmt+RESET + "sql쿼리8");
}
System.out.println(RED+stmt+RESET + " <-- empList stmt");
// 출력할 공지 데이터
ResultSet rs = stmt.executeQuery(); // Set중복된 데이터가 절대 들어오지 않는다는 장점이있다 Set은 쓰기 매우 불편해서 List로 바꿔서 사용하는게 좋다
//자료구조 ResultSet 타입을 일반적인 자료구조타입(자바 배열 or 기본API 자료구조타입 List, Set(순서가 없어서 쓰기힘듬), Map) 배열은 정적배열이라 데이터 수를 알아야되므로 매우쓰기 힘듬
// ResultSet -> ArrayList<Employees>로 바꿔주면 모든자바 프로그램에서 다른사람이 쉽게 사용할수있게된다.
ArrayList<Employees> empList = new ArrayList<Employees>();
while(rs.next()){ // 와일문을 활용하여 rs 에 있는 값들을 ArrayList에 저장
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);
}
//모델값이 잘드러오았는지 확인하기
System.out.println(RED+empList.size()+RESET+"<-- empList empList.size()");
for(Employees e : empList ){
System.out.println(RED+e.firstName +""+e.lastName+RESET);
}
// 두번째 모델값 도탈카운트를 이용한 라스트 페이지의 값구하기
int totalrow = 0;
int lastPage = 0;
// 마지막 페이지
PreparedStatement stmt2 = conn.prepareStatement("select count(*) from employees");
ResultSet rs2 = stmt2.executeQuery(); // Set중복된 데이터가 절대 들어오지 않는다는 장점이있다 Set은 쓰기 매우 불편해서 List로 바꿔서 사용하는게 좋다
//자료구조 ResultSet 타입을 일반적인 자료구조타입(자바 배열 or 기본API 자료구조타입 List, Set(순서가 없어서 쓰기힘듬), Map) 배열은 정적배열이라 데이터 수를 알아야되므로 매우쓰기 힘듬
if(rs2.next()){
totalrow = rs2.getInt("count(*)");
}
lastPage = totalrow / rowPerPage;
if(totalrow % rowPerPage != 0) { // 마지막페이지가 rowPerPage로 나누었을때 딱 떨어지자 않는다면 플러스 1을 해줘야되기매눈데 if문을 사용하여 아닌 경우를 생각하자.
lastPage = lastPage + 1; // 마지막페이지
}
System.out.println(totalrow);
System.out.println(lastPage);
// View Layer : 모델값을 출력하는 단계이다.
// 이런 3개를 나누어서 작업하는 경우는 MVC 라고한다
// 첫단계는 신입이 많이하고 2번째는 좀 하는 개발자가 하고 3단꼐는 프론트엔드가 작업하는 경우가 많다.
//현재 날짜 구하기
Calendar today = Calendar.getInstance(); //메소드를 사용하여 변수에저장?
int year = today.get(Calendar.YEAR); // today에저장된 년도를 인트 변수에 저장
int month = today.get(Calendar.MONTH); // today 에 저장된 월을 인트 변수에 저장
int day = today.get(Calendar.DATE); //today 에 저장된 일을 인트 변수에 저장
System.out.println(RED+year+RESET + "<-- empList 현재 년도 ");
System.out.println(BG_RED+month+RESET + "<-- empList 현재 월 ");
System.out.println(BG_RED+day+RESET + "<-- empList 현재 일");
%>