ÆäÀÌÁö ºÐÇÒ ±â´É
ÆäÀÌÁö ºÐÇÒ ±â´ÉÀ̶õ?
¸ñ·ÏÀ» º¸¿©ÁÖ´Â list.jsp ¸¦ ¿©·¯ ÆäÀÌÁö·Î ³ª´©¾î º¸¿©ÁÖ´Â ±â´ÉÀÔ´Ï´Ù.
°Ô½ÃÆÇÀÇ ·¹Äڵ尡 600 °³¶ó¸é ¸ñ·ÏÀ» º¸¿©ÁÖ´Â list.jsp ¾È¿¡¼ while ¹®ÀÌ 600¹ø ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù.
·¹Äڵ尡 600 ÀÌ ¾Æ´Ï¶ó 60,000, 600,000 À̶ó¸é ¹®Á¦´Â ½É°¢ÇØÁý´Ï´Ù.
ÀÌ ¹®Á¦´Â ¸ñ·ÏÀ» ¿©·¯ ÆäÀÌÁö·Î ³ª´©¸é º¸¿©ÁÖ¸é ÇØ°áµË´Ï´Ù.
¿©±â¼´Â À̰ÍÀ» "ÆäÀÌÁö ºÐÇÒ ±â´É" À̶ó°í À̸§À» ºÙÀ̰ڽÀ´Ï´Ù.
Å×½ºÆ®¸¦ À§ÇØ ±âÁ¸¿¡ ÀμƮÇÑ ·¹Äڵ带 ¸ðµÎ »èÁ¦ÇÑ ÈÄ, ´ÙÀ½ ÆÄÀϸ¦ ÀÌ¿ëÇØ¼ board Å×ÀÌºí¿¡ Å×½ºÆ®¸¦ À§ÇÑ ·¹Äڵ带 »ðÀÔÇÕ´Ï´Ù.
Å×½ºÆ®ÆÄÀÏ
·¹Äڵ带 ±×·ìÀ¸·Î ¹±â À§ÇÑ SQL
´ÙÀ½ SQL¹®Àº ÆäÀÌÁö ºÐÇÒ ±â´ÉÀ» À§ÇÑ ÇÙ½ÉÀûÀÎ ¿ªÇÒÀ» ÇÏ´Â ¿À¶óŬ SELECT ¹®À¸·Î, Á¤·ÄµÈ ·¹Äڵ带 Â÷·Ê·Î 10°³¾¿ ¹¾î ±×·ìÈ ÇÒ ¶§ ù¹øÂ° ±×·ìÀ» º¸¿©ÁÖ±â À§ÇÑ SQL¹®ÀÔ´Ï´Ù.
·¹ÄÚµå ±×·ì 1 ¿¡ ÇØ´çÇÏ´Â ·¹Äڵ带 fetch ÇÏ´Â SQL¹®
SELECT boardno,title,wdate FROM ( SELECT ROWNUM R, A.* FROM (select boardno, title, wdate FROM board ORDER BY boardno DESC) A) WHERE R BETWEEN 1 and 10;
·¹ÄÚµå ±×·ì 2 ¿¡ ÇØ´çÇÏ´Â ·¹Äڵ带 fetch ÇÏ´Â SQL¹®
SELECT boardno,title,wdate FROM ( SELECT ROWNUM R, A.* FROM (select boardno, title, wdate FROM board ORDER BY boardno DESC) A) WHERE R BETWEEN 11 and 20;
·¹ÄÚµå ±×·ì 3 ¿¡ ÇØ´çÇÏ´Â ·¹Äڵ带 fetch ÇÏ´Â SQL¹®
SELECT boardno,title,wdate FROM ( SELECT ROWNUM R, A.* FROM (select boardno, title, wdate FROM board ORDER BY boardno DESC) A) WHERE R BETWEEN 21 and 30;
¿©±â¼ ROWNUM Àº SELECT ¹®Àå¿¡ ´ëÇØ¼ ¿À¶óŬÀÇ °¡»ó Ä÷³À¸·Î 1ºÎÅÍ ¼øÂ÷ÀûÀ¸·Î ºÙ¿©Áý´Ï´Ù.
WHERE Àý¿¡¼ ROWNUM À» ÀÌ¿ëÇÏ¿© º¸¿©ÁÙ ·¹Äڵ带 ±×·ìº°·Î ÃßÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
list.jsp ¸¦ ¿äûÇÒ ¶§ µ¿½Ã¿¡ ±×·ì¹øÈ£¸¦ ÆÄ¶ó¹ÌÅÍ·Î ³Ñ°ÜÁØ´Ù¸é ±×·ì¿¡ ÇØ´çÇÏ´Â ½ÃÀÛ ·¹ÄÚµå¹øÈ£¿Í ¸¶Áö¸· ·¹ÄÚµå ¹øÈ£¸¦
±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
list.jsp ¿¡ Àü´ÞÇÒ ·¹ÄÚµå ±×·ì¹øÈ£¿¡ ÇØ´çÇÏ´Â ÆÄ¶ó¹ÌÅ͸¦ curPage,
list.jsp ¼Ò½º Äڵ峻¿¡¼ ·¹ÄÚµå ±×·ì¹øÈ£¸¦ ÀúÀåÇÏ´Â º¯¼ö ¿ª½Ã curPage ·Î ÇÑ´Ù¸é
ÆäÀÌÁö ºÐÇÒ ±â´ÉÀ» ¾Æ·¡Ã³·³ ±¸Çö ÇÒ ¼ö ÀÖ½À´Ï´Ù.
list.jsp
int curPage = (request.getParameter("curPage") == null) ? 1 : Integer.parseInt(request.getParameter("curPage")); // ½ÃÀÛ ·¹ÄÚµå °è»ê int start = (curPage - 1) * 10 + 1; // ¸¶Áö¸· ·¹ÄÚµå °è»ê int end = start + 10 -1; // ÇØ´ç ÆäÀÌÁöÀÇ ·¹ÄÚµå ¼ÂÀ» ±¸ÇÑ ÈÄ Ãâ·ÂÇÕ´Ï´Ù. ... sql = "SELECT boardno,title,wdate FROM( " + "SELECT ROWNUM R, A.* FROM( select boardno, title, wdate " + "FROM board ORDER BY boardno DESC) A) " + "WHERE R BETWEEN " + start + " and " + end; ...
ÀÌÁ¦ ¿ì¸®´Â list.jsp?curPage=1 °ú °°ÀÌ ¹æ¹®Çϸé 10°³¾¿ ·¹Äڵ带 º¼ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù.
ÇÏÁö¸¸ ÀÌ·¸°Ô »ç¿ëÀÚ°¡ ÁÖ¼Òâ¿¡ ÀÏÀÏÈ÷ Ãİ¡¸ç ¹æ¹®ÇÏ´Â °Ô½ÃÆÇÀº ¾ø½À´Ï´Ù.
ÀϹÝÀûÀÎ °Ô½ÃÆÇÀº °Ô½Ã±Û ¾Æ·¡ ÆäÀÌÁö¸¦ Á÷Á¢ À̵¿ÇÒ ¼ö ÀÖ´Â ¸µÅ©¸¦ Á¦°øÇÕ´Ï´Ù.
<a href="list.jsp?curPage=1">[1]</a>
±×·±µ¥ ÆäÀÌÁö°¡ ¾ó¸¶³ª »ý±æ °ÍÀÎÁö¸¦ °è»êÇÏ´Â ·ÎÁ÷ÀÌ ÀÖ¾î¾ß ÇÒ °Í °°½À´Ï´Ù.
À§¿¡¼ "·¹ÄÚµå ±×·ì" °ú ¿©±â¼ ¾ð±ÞÇÏ´Â ÆäÀÌÁö´Â °°Àº ÀǹÌÀÔ´Ï´Ù.
ÃÑ ÆäÀÌÁö¸¦ ¾È´Ù¸é ÃÑ ÆäÀÌÁö¸¸Å ·çÇÁ ¹®À» µ¹·Á <a href="list.jsp?curPage=1">[1]</a>
°ú °°Àº ÆäÀÌÁö Á÷Á¢ À̵¿ ¸µÅ©¸¦ ¸¶Áö¸· ÆäÀÌÁö±îÁö ¸¸µé¾î Á¦°øÇØ ÁÙ ¼ö ÀÖ½À´Ï´Ù.
ÃÑ ÆäÀÌÁö¸¦ ±¸ÇÏ´Â ¹æ¹ýÀº ÃÑ ·¹ÄÚµå ¼ö¸¦ ÅëÇØ¼ ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
totalRecord
int totalRecord = 0; String sql = "select count(*) cnt from board"; ...
ÃÑ ·¹ÄÚµå ¼ö¸¦ ±¸Çß´Ù¸é, ¾Æ·¡ ÄÚµåÁ¶°¢À» ÀÌ¿ëÇØ¼ ÃÑ ÆäÀÌÁö ¼ö¸¦ ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
totalPage
int totalPage = 0;
if ( totalRecord != 0 ) {
if (( totalRecord % 10 ) == 0 ) {
totalPage = ( totalRecord / 10 );
} else {
totalPage = ( totalRecord / 10 + 1);
}
}
ÀÌÁ¦´Â ÃÑ ÆäÀÌÁö ¼ö¸¦ ÀÌ¿ëÇØ¼ ÆäÀÌÁö Á÷Á¢ À̵¿ ¸µÅ©¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
page direct link
<% for ( int i = 1; i<=totalPage; i++ ) { %> <a href="list.jsp?curPage=<%=i%>">[<%=i%>]</a> <% } // for statment end %>
ÆäÀÌÁö´ç º¸ÀÏ ·¹ÄÚµå ¼ö¸¦ ÀúÀåÇÒ º¯¼ö¸¦ numPerPage ¶ó°í ÇÏ°í °¢ ÆäÀÌÁöÀÇ ½ÃÀÛ ·¹ÄÚµå ¹øÈ£¿Í ¸¶Áö¸· ·¹ÄÚµå ¹øÈ£¸¦ ±¸ÇÏ´Â ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.
int numPerPage = 10; // ½ÃÀÛ ·¹ÄÚµå °è»ê int start = ( curPage - 1 ) * numPerPage + 1; // ¸¶Áö¸· ·¹ÄÚµå °è»ê int end = start + numPerPage - 1;
ÃÑ ÆäÀÌÁö ±¸ÇÏ´Â ÄÚµå ¿ª½Ã ¾Æ·¡¿Í °°ÀÌ º¯°æµÇ¾î¾ß ÇÕ´Ï´Ù.
totalPage
int totalPage = 0;
if ( totalRecord != 0 ) {
if ( ( totalRecord % numPerPage ) == 0 ) {
totalPage = ( totalRecord / numPerPage );
} else {
totalPage = ( totalRecord / numPerPage + 1 );
}
}
´ÙÀ½Àº ÀÌÁ¦±îÁö ±¸ÇöÇÑ ÆäÀÌÁö ºÐÇÒ ±â´É ¾Ë°í¸®ÁòÀ» Á¤¸®ÇÑ °ÍÀÔ´Ï´Ù.
ÆäÀÌÁö ºÐÇÒ ¾Ë°í¸®Áò
- ÃÑ ·¹ÄÚµå ¼ö¸¦ ±¸ÇÑ´Ù.
- ÇÑ ÆäÀÌÁö´ç º¸ÀÏ ·¹ÄÚµå ¼ö¸¦ °áÁ¤Çϰí, ÃÑÆäÀÌÁö ¼ö¸¦ ±¸ÇÑ´Ù.
- ù¹øÂ° ·¹ÄÚµå ¹øÈ£¿Í ¸¶Áö¸· ·¹ÄÚµå ¹øÈ£¸¦ ±¸ÇÏ¿© Ãâ·ÂÇÑ´Ù.
- °¢ ÆäÀÌÁö¿¡ ´ëÇÑ Á÷Á¢ À̵¿ ¸µÅ©¸¦ ¸¸µç´Ù.
À§ ¾Ë°í¸®ÁòÀ» ±âÁ¸ÀÇ list.jsp ÆÄÀÏ¿¡ Àû¿ëÇÏ¿© °»½ÅÇÕ´Ï´Ù.
list.jsp
<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.sql.*,net.java_school.util.*,net.java_school.db.dbpool.*" %>
<jsp:useBean id="dbmgr" scope="application"
class="net.java_school.db.dbpool.OracleConnectionManager" />
<html>
<body>
<%
Log log = new Log();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
//1. ÃÑ ·¹ÄÚµå ¼ö¸¦ ±¸ÇÑ´Ù.
int totalRecord = 0; //ÃÑ µ¥ÀÌÅÍ °³¼ö¸¦ ÀúÀåÇÒ º¯¼ö
try {
con = dbmgr.getConnection();
sql = "select count(*) cnt from board";
pstmt = conn.prepareStatement( sql );
rs = pstmt.executeQuery();
rs.next();
totalRecord = rs.getInt(1);
} catch ( SQLException e ) {
} finally {
try {
rs.close();
pstmt.close();
dbmgr.freeConnection( con );
//log.close();·Î±×ÆÄÀÏÀÇ ÆÄÀÏ Ãâ·Â ½ºÆ®¸²À» ¹ÝȯÇÏÁö ¾Ê´Â´Ù.
} catch ( SQLException e ) {}
}
//2. ÇÑ ÆäÀÌÁö´ç º¸ÀÏ ·¹ÄÚµå ¼ö¸¦ °áÁ¤Çϰí, ÃÑ ÆäÀÌÁö ¼ö¸¦ ±¸ÇÑ´Ù.
int numPerPage = 10; // ÇÑ ÆäÀÌÁö´ç º¸ÀÏ ·¹ÄÚµå ¼ö °áÁ¤
int totalPage = 0; //ÃÑ ÆäÀÌÁö¼ö¸¦ ÀúÀåÇÒ º¯¼ö
if ( totalRecord != 0 ) {
if ( ( totalRecord % numPerPage ) == 0 ) {
totalPage = ( totalRecord / numPerPage );
} else {
totalPage = (totalRecord / numPerPage + 1 );
}
}
//3. ù¹øÂ° ·¹ÄÚµå ¹øÈ£¿Í ¸¶Áö¸· ·¹ÄÚµå ¹øÈ£¸¦ ±¸Çϰí Ãâ·ÂÇÑ´Ù.
int curPage = (request.getParameter("curPage") == null) ? 1 :
Integer.parseInt(request.getParameter("curPage"));
// ½ÃÀÛ ·¹ÄÚµå °è»ê .....
int start = ( curPage - 1 ) * numPerPage + 1;
// ¸¶Áö¸· ·¹ÄÚµå °è»ê .....
int end = start + numPerPage - 1;
// ÇØ´ç ÆäÀÌÁöÀÇ ·¹ÄÚµå ¼ÂÀ» ±¸ÇÑ ÈÄ Ãâ·ÂÇÕ´Ï´Ù.
try {
con = dbmgr.getConnection();
sql = "SELECT boardno,title,wdate FROM(" +
"SELECT ROWNUM R, A.* FROM(" +
"SELECT boardno, title, wdate FROM board ORDER BY boardno DESC) A) " +
"WHERE R BETWEEN ? and ?";
pstmt = con.prepareStatement( sql );
pstmt.setInt(1, start);
pstmt.setInt(2, end);
rs = pstmt.executeQuery();
while ( rs.next() ) {
int boardno = rs.getInt( "boardno" );
String title = rs.getString( "title" );
Date wdate = rs.getDate( "wdate" );
%>
<a href="view.jsp?boardno=<%=boardno%>&curPage=<%=curPage%>"><%=title%></a>
<%= wdate.toString() %><br>
<%
} //while ¹® ³¡
} catch ( SQLException e ) {
log.debug( "Error Source:list.jsp : SQLException" );
log.debug( "SQLState : " + e.getSQLState() );
log.debug( "Message : " + e.getMessage() );
log.debug( "Oracle Error Code : " + e.getErrorCode() );
log.debug( "sql : " + sql );
} finally {
try {
rs.close();
pstmt.close();
dbmgr.freeConnection( con );
log.close();
} catch ( SQLException e ) {}
}
%>
<br>
<%
// 4. °¢ ÆäÀÌÁö¿¡ ´ëÇÑ Á÷Á¢ À̵¿ ¸µÅ©¸¦ ¸¸µç´Ù.
for ( int i = 1;i <= totalPage;i++ ) {
%>
<a href="list.jsp?curPage=<%= i %>"><%= i %></a>
<%
}
%>
<br>
<p>
<a href="write_form.jsp?curPage=<%=curPage%>">»õ±Û ¾²±â</a>
</body>
</html>
JSP ÆäÀÌÁö¿¡¼´Â ¿Ö page ¶õ º¯¼ö¸¦ ¸¸µéÁö ¸øÇϴ°¡?
JSP ¿¡¼´Â page ¶ó´Â ·¹ÆÛ·±½º°¡ ÀÌ¹Ì ¼±¾ðµÇ¾î ÀÖ½À´Ï´Ù.
Object page = this;
µû¶ó¼ page ¶õ À̸§À¸·Î º¯¼ö¸¦ ¸¸µéÁö ¸øÇÕ´Ï´Ù.
- ´ÙÀ½ °Á : ÆäÀÌÁö Á÷Á¢ À̵¿ ¸µÅ©¼ö Á¦ÇÑ
- ÀÌÀü °Á : °Ô½ÃÆÇ ¿¬½À
