데이터베이스

페이징처리 관련, 오라클 등 데이터베이스 적용 및 자바 예제

늘근이 2014. 5. 22. 23:20

페이징 처리를 할때 무엇을 처리해야할지 생각해보자.

일단 SELECT * FROM product ORDER BY no

같은 sql로 정렬을 좌악 하는것을 생각할수 있겠다.


그런데 오라클에서는 rownum이라는 top N 쿼리를 이용할수 있는 놈이 있다. 대신 이넘은 order by 가 실행되기전에 rownum이 되므로 원하지 않는 결과값이 나올수 있다.

따라서 subquery를 써야할수 있다.


SELECT a.* , rownum

FROM(

SELECT no, name, price, image, description 

FROM product 

ORDER BY no DESC

) a 


근데 이건 1부터 어디전까지 가져오는 건 되도, 4~6가져와라 이런건 없다. 그래서 rownum에 별칭을 준다.


SELECT b.*

FROM (

SELECT a.* , rownum rnum

FROM(

SELECT no, name, price, image, description 

FROM product 

ORDER BY no DESC

) a

) b

WEHRE b.rnum BETWEEN 1 and 10; 


이렇게 1~10페이지를 불러와라 이렇게 되는것이다란말이다. 이걸 구체적으로 자바에서 받아서 써먹어주자


ArrayList<Product> productList(int startNo, int endNo) {

}


String sql = 위에꺼 그냥 써주자. 대신 BETWEEN ? and ? 해줘서, 이 물음표에 startNo, endNo를 넣어주면 되겠다.

stmt.setInt(1,startNo) stmt.setInt(2,endNo) 이렇게 말이다. 그리고 돌리면 나온다.


서블릿에는



 

private void productList(Https... request, HttpServl... response) {

String cPage = request.getParameter("pageNo");

int page =1;

 

try{

page = Integer.parseInt(cPage);

}catch(Exception e) {

 

} //try catch를 해주는 이유는, 원하지 않는 이상한 값이 올 경우는 아예 위에서 정해준 1로 계속 가라는걸 해주기 위해서다.

 

//1~10 11~20 이렇게 보여준다면, 계산을 해보면 된다

 

}


그리고 페이징이 페이지 넘버가 중요하기 때문에, 또한 dao에 관련 메서드를 추가해준다.

전체 페이지수를 불러오는 거시기를 만든다


그리고 페이징이 페이지 넘버가 중요하기 때문에, 또한 dao에 관련 메서드를 추가해준다.

전체 페이지수를 불러오는 거시기를 만든다

public int listCount() throws SQLException {

String sql = "SELECT COUNT(*) FROM product"

}

이런식으로 돌려준다.

 

또한 다 짜기는 귀찮기때문에, 첨부파일을 받는다

 

그리고 첨부받은 PageUtility pageUtil = new PageUtility(perPage, dao.listCount(), page);

이러면 스트링값을 나옴. 따라서

request.setAttribute("pageLisk" pageUtil.getPageBar());

이런식으로 보낸다.

 

이러고 view에 가서 

</c:forEach>끝나는 위치쯤에

${pageLisk}해준다.

그밑에 <form id="frm" method="post" action="productList">

<input type = "hidden" name = "pageNo" id="pageNo" />

</form>

 

대신, 다른 페이지를 눌렀을때, 그 페이지로 이동하는 자바스크립트가 필요하기때문에 page.js를 돌린다. 내용은 다음과같다

 

//조건 검색, 페이지 번호로 게시글 요청을 위한 메서드  


function pagelist(cpage){

//input 양식의 hidden으로 선언된 page에 요청된 페이지 정보 셋팅 

document.getElementById("pageNo").value=cpage;

var frm = document.getElementById("frm");

frm.action="main.do";

frm.submit();

}


 

그런데 중요한건 advancedpageutility임. 이건 모든 페이징을 페이징하는거 이런거 하는거시다

advancedPageUtility pageUtil = new AdvancedPageUtility(perPage, productDao, listCount(), page, "images/");



AdvancedPageUtility.java

page.js

PageUtility.java





 


'데이터베이스' 카테고리의 다른 글

jdbc와 dbcp차이  (0) 2014.05.28
mysql 외부접속 허용하기  (0) 2014.05.28
데이터베이스 character encoding, Error Code: 1366. Incorrect string value:  (0) 2014.05.22
Oracle '&'주의  (0) 2014.05.20
Oracle 10g 원격접속  (0) 2014.05.20