首先,要实现分页,有一个知识点需要知道,就是在mysql里有个limit的用法,它可以用来选取显示几条博文和从哪个位置开始显示,具体语法如下:
select * from article limit m,n;其中m表示从表的哪个位置开始选取,n表示选取多少条数据。注意:数据库表中的位置是从0开始的。
如你想从第一条数据读到第七条数据,则语法应为:
select * from article limit 0,7;
接下来,我们需要设定或获取几个变量:每页要显示的条目数pageArticleNumber、当前页currentPage以及显示的总页数page。pageArticleNumber和currentPage可以直接设为变量:int pageArticleNumber, currentPage;而要获得page就需要先知道表的总条目数sum(直接用sql语句:select count(*) from article)可以得到。然后求page就出现以下几种情况:
if(pageArticleNumber>sum) page=1 //每页显示条目数大于了表的总条目数,无分页;
/*
*总条目是每页显示条目数的倍数,则无多余页,反之则要加1;
*/
else if(sum%pageArticleNumber=0) page=sum/ pageArticleNumber
else page=sum/ pageArticleNumber+1;
分情况求得总页数page后,咱们开始实现:
第一步,定义变量:
private int sum ;
private int pageArticleNumber = 4;
private int page
第二步,获取表分页数:
/*
* 获取Article表的分页数
*/
public int countsofArticlePage() {
String sql1 = "select count(*) from article";
try {
rs = st.executeQuery(sql1);
if (rs.next()) {
sum = rs.getInt(1);
if(pageArticleNumber>sum)page=1;
else if (sum % pageArticleNumber == 0)
page = sum / pageArticleNumber;
else
page = sum / pageArticleNumber + 1;
}
} catch (SQLException e) {
e.printStackTrace();
}
returnpage;
}
第三步:显示当前页的博文列表
由于非尾页和尾页(可能显示的条目数不是pageArticleNumber)实现起来略有不同,所以分两种情况进行实现。
/*
* 显示尾页博文,存储在结果集里
*/
publicResultSet displayfinalArticle() {
String sql;
if (pageArticleNumber <sum &&sum %pageArticleNumber == 0) {
sql = "select * from article limit " + (page - 1)
* pageArticleNumber +"," +pageArticleNumber; try {
rs = st.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
} else {
sql = "select * from article limit " + (page - 1)
* pageArticleNumber +"," +sum %pageArticleNumber;
System.out.println("sql4=" + sql);
try {
rs = st.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
returnrs;
}
/*
* 显示当前页的博文,存储在结果集里
*/
public ResultSet displayCurrentPageArticle(int currentPage) {
String sql;
if(currentPage>page||currentPage<1) {
rs=null;
System.out.println("页数越界");
}
else if(currentPage!=page ){
sql = "select * from article limit " + (currentPage - 1)*pageArticleNumber +"," +pageArticleNumber;
try {
rs = st.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
else {
QueryJDBC myQuery = new QueryJDBC();
myQuery.countsofArticlePage();
rs = myQuery.displayfinalArticle();
}
returnrs;
}
第四步,从结果集中取数据:(我是在jsp文件中做取数据操作的),前三步的函数都是类QueryJDBC的成员函数;
<%
QueryJDBC myQuery = new QueryJDBC();
int currentPage=1,previousPage=1,postPage=1;
String pageStr =request.getParameter("Page");
/*
**最开始时显示首页
*/
if(pageStr==null) currentPage=1;
else currentPage = Integer.parseInt(pageStr);
if(currentPage!=1) previousPage=currentPage-1;
int n= myQuery.countsofArticlePage();//获取总页数
System.out.println("n="+n);
if(currentPage!=n) postPage=currentPage+1;
else postPage=currentPage;
ResultSet rs =myQuery.displayCurrentPageArticle(currentPage);
/*
**取数据
*/
while(rs.next()) {
int articleId = rs.getInt("articleId");
String title = rs.getString("articleTitle");
String content = rs.getString("articleContent").substring(0, 200);
String time = rs.getString("publishTime").substring(0,16);
QueryJDBC myQuery1 = new QueryJDBC();
String categoryName=myQuery1.displayCategoryById(articleId);
out.print("<br>");
String title1 = URLEncoder.encode(title,"UTF-8");
String url="myArticle.jsp?title="+title1;
%>
<div id="articleTitle">
<ahref=<%=url%>><%=title%></a><br>
</div>
<divid="articleContent">
<%=content %><br>
</div>
<divid="bottom">
<%=time%>
<%=categoryName%> |<ahref=<%=url%>>发表评论</a>
</div>
<%
}
%>
<p align="center"><ahref="Copy ofMyblog.jsp?Page=1">首页</a>|<ahref="Copy ofMyblog.jsp?Page=<%=previousPage%>">上一页</a>|<ahref="Copy ofMyblog.jsp?Page=<%=postPage%>">下一页</a>|<a href="Copy ofMyblog.jsp?Page=<%=n%>">尾页</a></p>
有想看看效果的,下载源代码