성별, 이름검색 조회 리스트 구현

권원중·2023년 4월 27일

구디아카데미

목록 보기
5/23
post-thumbnail
<%
			//콘솔창에 꾸미기 기능 변수 선언
				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 현재 일");
%>

0개의 댓글