약간 뭐야 그거 페이징의 늪..?
나를 위한 자바 페이징
public int pageCnt() {
conn = db.getConnection();
String sql = "select count(*)c from tbl_board";
int result = 0;
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
rs.next();
result = rs.getInt(1);
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
public ArrayList<Tbl_BoardVO> getPage(int pageCnt) {
conn = db.getConnection();
int result = 0;
ArrayList<Tbl_BoardVO> list = new ArrayList<>();
String sql = "select tt.*
from (select rownum r,
t.* from (select * from tbl_board order by bno desc)t)tt
where r BETWEEN ? and ?";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, pageCnt - 19);
pstmt.setInt(2, pageCnt);
result = pstmt.executeUpdate();
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Tbl_BoardVO vo = new Tbl_BoardVO();
vo.setBno(rs.getInt(2));
vo.setTitle(rs.getString(3));
vo.setContents(rs.getString(4));
vo.setWriter(rs.getString(5));
vo.setRegdate(rs.getString(6));
list.add(vo);
}
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
뷰 없이 ROWNUM 으로 order by desc를 하려했더니 쿼리가 요상해졌다.
방법 1
select tt.* from ( select rownum r, t.* from (select * from tbl_board order by bno desc)t)tt where r BETWEEN ? and ?
방법 2
SELECT tt.* from ( SELECT (RANK() OVER(order by bno desc)) ROWNUMS, t.* FROM (select * from tbl_board)t)tt where rownums BETWEEN ? and ?
들어가는 페이지에서 바로 1페이지로
페이지 값을 쿼리스트링으로 받아올 수 있게 처리
<a href="pageServelet?page=1" id="page">4. 페이지 게시판</a><br>
서블렛
쿼리스트링을 받아옴
int thisPage = Integer.parseInt(request.getParameter("page"));
현재페이지로 보여줄 다음 페이지를 구함
int nextPage = ((thisPage-1)/10)*10+1;
위 쿼리에 넣어줄 매개변수를 계산해서 넣어준다
(페이지에 20개씩 보내줄예정)
list = dao.getPage(thisPage*20);
구한 값을 뿌려주는 페이지로 보내줌
request.setAttribute("nextPage", nextPage);
request.setAttribute("thisPage", thisPage);
request.setAttribute("list", list);
request.getRequestDispatcher("pageBoard.jsp").forward(request, response);

셋 어트리뷰트로 보내준 nextPage를 받아서
1~10 페이지 11~20 페이지씩 보여주도록 처리함
클릭하면 해당 페이지로 이동하도록 하이퍼링크 처리함
<c:forEach var = "page" begin="${nextPage }" end="${nextPage+9 }">
<a href="pageServelet?page=${page }">${page }</a></c:forEach>