수업에선 if문으로 들어오는 parameter값에 따라 if문으로 분기를 줘서 sql문을 나눴는데, 들어오는 값이 많아질수록 분기가 엄청 늘어나기때문에 해결할 방법이 없을까 생각해서 만들어 보았다.
// where에 들어가는 조건어 따라 달라지는 파라미터를 자동적으로 주소에 넣기위해 만든 변수
// 빈값을 넣을경우 null값으로 인식한다 그래서 오류남 따라서 의미없는 &를 넣음
String wherePar = "&";
// +=을 사용함으로 나중에 다른 변수가 추가될때 if (변수 != null){ wherePar += 내용}만 넣으면 자동으로 추가된다
if (!"".equals(gender)) {
wherePar += "&gender=" + gender;
}
if (!"".equals(empNoStart)) {
wherePar += "&empNoStart=" + empNoStart;
}
if (!"".equals(empNoEnd)) {
wherePar += "&empNoEnd=" + empNoEnd;
}
System.out.println(wherePar + " <-wherePar 값");
// and 를 마지막 빼고 넣기위해 ArrayList를 써서 값을 만들어둠
ArrayList<String> whereSqlArray = new ArrayList<String>();
if (!"".equals(gender)){
// gender 값 앞뒤로 ' 를 안달아두면 문자로 인식안함 문자는 전부 해줘야함
String s = " gender=" + "'" + gender + "'";
whereSqlArray.add(s);
}
// empNoStart의 값과 empNoEnd 값이 둘다 null이 아닐경우 between으로 입력
// 아닌경우 따로 입력되게 해둠
if (!"".equals(empNoStart)
&& !"".equals(empNoEnd)) {
String s = " emp_no BETWEEN " + empNoStart + " AND " + empNoEnd;
whereSqlArray.add(s);
} else {
if (!"".equals(empNoStart)){
String s = " emp_no >= " + empNoStart;
whereSqlArray.add(s);
}
if (!"".equals(empNoEnd)){
String s = " emp_no <= " + empNoEnd;
whereSqlArray.add(s);
}
}
// whereSqlArray에 알맞게 들어갔는지 확인하기 위함
System.out.println(whereSqlArray.size() + " <- ArrayListSize");
// 빈 공백을 기본값으로 넣어줌 앞에있는 쿼리 구문과 띄워두기 위함
String whereSql = " ";
// foreach 문을 이용해서 whereSql에 값을 이어줌
// 마지막위치에 and를 빼주기위해 j값을설정
int j = 0;
for (String s : whereSqlArray) {
if (j < whereSqlArray.size() - 1){
whereSql += s + " and";
j++;
} else {
whereSql += s;
}
}
// whereSql 문이 제대로 짜졌나 디버깅
System.out.println(whereSql + " <- whereSql");
// 한페이지 나타내는량 변수 설정
int pagePerView = 10;
int limitStart = (currentPage - 1) * pagePerView;
// if문으로 분기를 주기때문에 생명주기 때문에 미리 선언함
String sql1 = null;
PreparedStatement stmt1 = null;
// ArrayList의 크기가 0이면 where 문에 들어갈것이 아무것도 없음을 뜻함
if (whereSqlArray.size() == 0) {
// 쿼리문 짜기
sql1 = "select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate from employees order by "
+ col
+ " "
+ ascDesc
+ " limit ?, ?";
stmt1 = conn.prepareStatement(sql1);
stmt1.setInt(1, limitStart);
stmt1.setInt(2, pagePerView);
} else {
sql1 = "select emp_no empNo, birth_date birthDate, first_name firstName, last_name lastName, gender, hire_date hireDate from employees"
+ " where"
+ whereSql
+ " order by "
+ col
+ " "
+ ascDesc
+ " limit ?, ?";
stmt1 = conn.prepareStatement(sql1);
stmt1.setInt(1, limitStart);
stmt1.setInt(2, pagePerView);
}
System.out.println(stmt1 + " <- empList stmt");
ResultSet rs1 = stmt1.executeQuery();
System.out.println(rs1 + " <- empList rs");