JSP分页

JSP分页实现
本文介绍了一种使用JSP和SQL Server 2000实现分页功能的方法。通过具体的代码示例展示了如何通过bookmanage.jsp和pageAction.jsp两个页面进行前后页切换,并通过BookDAO类实现SQL查询来获取指定页数的数据。

实现 jsp分页功能,数据库用的是  SQLserver 2000 ,代码如下:
显示页面:bookmanage.jsp (我用了 frameset,所以 <a> 标签里会有 target 属性)

....
<%
    
int curPage = 0// 当前页面页数
    
if (request.getParameter("curPage") != null){
        curPage 
= ((Integer) request.getAttribute("curPage")).intValue();
    }
    List
<BookDetail> bookList = new BookDAO().getBookDetails(curPage, 4);
%>
....
<href="pageAction.jsp?action=prePage&curPage=<%= curPage %>" target="main">&lt;&lt; 上一页</a>
<href="pageAction.jsp?action=nextPage&curPage=<%= ++curPage %>" target="main">下一页 &gt;&gt;</a>
....

处理页面:pageAction.jsp
...
<%
    String action 
= request.getParameter("action");
    
final int size = 4// 每页有4条记录
    int curPage = Integer.parseInt(request.getParameter("curPage"));
    
if ("prePage".equals(action)){
        curPage
--;
        
if(curPage >= 0{
            request.setAttribute(
"curPage"new Integer(curPage));
        }
else{
            curPage 
= 0;
            request.setAttribute(
"curPage"new Integer(curPage));
        }

    }

    
    
if ("nextPage".equals(action)){
        
int max = new BookDAO().getBookDetailsAmount(); // 得到book所有记录个数
        if(curPage <= Math.round(max/size + 0.5f- 1 ) {
            request.setAttribute(
"curPage"new Integer(curPage));
        }
else{
            curPage 
= Math.round(max/size + 0.5f- 1;
            request.setAttribute(
"curPage"new Integer(curPage));
        }

    }

    pageContext.forward(
"bookmanage.jsp");
%>

BookDAO类
...
    
private final String tableName = "book";
...
    
public ArrayList<BookDetail> getBookDetails(int curPage, int size) throws Exception {
        ArrayList
<BookDetail> bookDetails;
        Connection conn 
= null;
        Statement stmt 
= null;
        ResultSet rs 
= null;
        String sql 
= "select top " + size + " * from " + tableName
                
+ " where id not in (select top " + curPage * size
                
+ " id from " + tableName + " )";
        
try {
            conn 
= getConnection();
            stmt 
= conn.createStatement();
            rs 
= stmt.executeQuery(sql);
            bookDetails 
= new ArrayList<BookDetail>();
            
while (rs.next()) {
                String id 
= rs.getString("id");
                String name 
= rs.getString("name");
                String title 
= rs.getString("title");
                
double price = rs.getDouble("price");
                
int year = rs.getInt("yr");
                String description 
= rs.getString("description");
                String saleAmount 
= rs.getString("saleAmount");
                BookDetail bookDetail 
= new BookDetail(id, name, title, price,
                        year, description, saleAmount);
                bookDetails.add(bookDetail);
            }

            
return bookDetails;
        }
 finally {
            closeResultSet(rs);
            closeStatement(stmt);
            closeConnection(conn);
        }

    }

...

当然我这个分页最主要的就是 sql 语句,完整语句是:

select top 4 *  from book where id not in (select top 8 id from book) 

这里显示的是第二个页面。
注意:关键字 top 在 SQLserver  里有用,在 mysql 里需用其他关键字。好像是 limit

虽然能够实现,但本人有些细节还请高人指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值