Java - 페이징을 위한 쿼리 만들기
SELECT * FROM NOTICE ORDER BY REGDATE DESC;
SELECT * FROM (
SELECT ROWNUM NUM, N.* FROM (
SELECT * FROM NOTICE ORDER BY REGDATE DESC
) N
)
WHERE NUM BETWEEN 1 AND 20;
날짜순으로 1~20페이지까지 정렬된 쿼리이다.
public List<Notice> getList(int page) throws ClassNotFoundException, SQLException {
int start = 1+(page-1)*10; //1, 11, 21, 31 ...
int end = 10*page; //10 , 20 , 30, 40 ....
String sql = "SELECT * FROM (" +
" SELECT ROWNUM NUM, N.* FROM (" +
" SELECT * FROM NOTICE ORDER BY REGDATE DESC" +
" ) N " +
" )" +
"WHERE NUM BETWEEN ? AND ?";
Class.forName(driver);
Connection con = DriverManager.getConnection(url,uid,pwd);
PreparedStatement st = con.prepareStatement(sql);
st.setInt(1, start);
st.setInt(2, end);
ResultSet rs = st.executeQuery();
List<Notice> list = new ArrayList<Notice>();
while(rs.next()) {
int id = rs.getInt("ID");
String title = rs.getString("title");
String wirterid = rs.getString("WRITER_ID");
Date regDate=rs.getDate("REGDATE");
String content = rs.getString("CONTENT");
int hit =rs.getInt("HIT");
String files = rs.getString("FILES");
Notice notice = new Notice(
id,
title,
wirterid,
regDate,
content,
hit,
files
);
list.add(notice);
}
rs.close();
st.close();
con.close();
return list;
}
페이징을 위한 getList 를 수정했다.
NoticeConsole 에서 getList(1) 과 getList(2) 를 출력해보면 값이 잘온다.
-
게시글 1
-
게시글 2
-
목록을 위한 View 생성하기
위에 쿼리문이 너무 복잡해보이는데 간단하게 만드는 방법이있다.
CREATE VIEW NOTICE_VIEW
AS
SELECT * FROM (
SELECT ROWNUM NUM, N.* FROM (
SELECT * FROM NOTICE ORDER BY REGDATE DESC
) N
);
VIEW 를 생성한다.
그리고 JAVA 에서 String sql = “SELECT * FROM NOTICE_VIEW WHERE NUM BETWEEN ? AND ?”; 이렇게 하면 더 간단하게 만들수있다!
댓글남기기