오늘은 mockaroo에서 만든 DB가 아닌 실제 샘플DB를 설치하고 이를 이용하여 쿼리를 연습하였다.
동적쿼리는 파라미터값에 따라 달라질 수 있는 쿼리를 말한다
/*
데이터를 가져오기 위한 sql
SELECT
emp_no empNo,
birth_date birthDate,
first_name firstName,
last_name lastName,
gender gender,
hire_date hireDate
FROM employees
ORDER BY emp_no ASC
LIMIT ?, ?
# order by를 지정하지 않고 select에 기본키(emp_no)가 있으면 기본키 오름차순으로 정렬된다
-> 변수 col과 ascDesc의 초기값
*/
String col = "emp_no";
String ascDesc = "ASC";
if(request.getParameter("col") != null
&& request.getParameter("ascDesc") != null) {
col = request.getParameter("col");
ascDesc = request.getParameter("ascDesc");
}
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 ?, ?";
// 컬럼과 정렬방식 파라미터에 따라 쿼리가 달라진다
성별에 따라 달라지는 출력결과
/*
SELECT
emp_no empNo,
birth_date birthDate,
first_name firstName,
last_name lastName,
gender gender,
hire_date hireDate
FROM employees
LIMIT ?,?
*/
//쿼리생성
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 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 = ? limit ?,?";
stmt = conn.prepareStatement(sql); // ? 3개
stmt.setString(1, gender);
stmt.setInt(2,startRow);
stmt.setInt(3,rowPerPage);
}
/*
gender를 선택하지 않으면 전체 데이터를 보여주고 성별을 선택하면
where절이 추가되어 해당 성별만 보여준다
*/