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 게시글1

  • 게시글 2 게시글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 ?”; 이렇게 하면 더 간단하게 만들수있다!

댓글남기기