220720 오늘의 훈련

(。◠ ◠。)·2022년 7월 20일

약간 뭐야 그거 페이징의 늪..?
나를 위한 자바 페이징

1. 전체 페이지 구하기

	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;
	}

2. 페이징 쿼리 구하기

	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 ?

3.현재페이지, 다음페이지 처리

들어가는 페이지에서 바로 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);

4. 보이는 페이지 처리


셋 어트리뷰트로 보내준 nextPage를 받아서
1~10 페이지 11~20 페이지씩 보여주도록 처리함
클릭하면 해당 페이지로 이동하도록 하이퍼링크 처리함

<c:forEach var = "page" begin="${nextPage }" end="${nextPage+9 }">
<a href="pageServelet?page=${page }">${page }</a></c:forEach>
profile
화이탱!

0개의 댓글