思路分析:分页的原理就是,假设每页显示数据为10,当前页数为1,那么显示的数据就是1~10条,页数为2,显示11~20条,以此类推。
需要注意的是,页数不能超过总页数(即数据库中总数据/每页数据显示数量)
一、获得数据库中的总页数,采用oracle数据库:
* 分页(分页算法)根据数据库的数据总量获得总页数
*
* @param count
* @param pageSize
* @return
*/
public int getTotalPages(int pageSize) {
int totalpages = 0;
<span style="white-space:pre"> </span>int count = mdi.getCount();//获得数据库中的数据总数<pre name="code" class="java"> // 当前总页数
// 当前页数如果正好被每页显示数量pageSize整出,就返回商,否则返回页数+1
totalpages = (count % pageSize == 0) ? (count / pageSize) : (count
/ pageSize + 1);
return totalpages;
}
二、编写SQL命令:
* 获得分页后的新闻数据
*
* @param pageSize
* 每页新闻数量
* @param pageIndex
* 每页索引(最低0?)
* @return
*/
<span style="white-space:pre"> </span>public List<Message> getPagingNews(int pageSize, int pageIndex) {
// 分页SQL
// 分页的原理就是取一个区间值(比方说每页10条数据,第1页取1~10条,第二页取11~20条,以此类推)
String sql = "select * from ( select rownum as r,tbl.* from tbl_message tbl order by posttime)"
+ " where r between ? and ?";
// 参数为页面新闻数*当前页面索引,每页新闻数量*(当前页面索引-1)
// 因为用的是between and 所以起始位置要+1,不然就会变成0~10这种
String[] values = new String[] { (pageSize * (pageIndex - 1) + 1) + "",
(pageSize * pageIndex) + "" };
List<Message> messageList = new ArrayList<Message>();
rs = super.execQuerySQL(sql, values);
try {
while (rs.next()) {
// ID,message,author,posttime
Message temp = new Message();
temp.setId(rs.getInt("ID"));
temp.setAuthor(rs.getString("author"));
temp.setMessage(rs.getString("message"));
temp.setPostTime(rs.getDate("posttime"));
messageList.add(temp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
dataBaseCloseChecked(conn, pstmt, rs);
}
return messageList;
三、输出到JSP页面:
//业务类,获得写好的分页代码(包含连接数据库、查询等)
MessageBiz mb = new MessageBiz();
//获得页数
String strPageIndex = request.getParameter("pageIndex");
//每页显示几条数据
int pageSize = 3;
//获得总页数(总数据量除以单页显示数据,例如有4条数据,每页显示3条,总页数就是2页)
int totalPages = mb.getTotalPages(pageSize);
//默认页数从1开始,如果获得索引值
int pageIndex = 1;
if (strPageIndex != null && strPageIndex.length() > 0) {
pageIndex = Integer.valueOf(strPageIndex);
}
//如果索引大于总页数,那么到末页;反之,到首页
if (pageIndex > totalPages) {
pageIndex = totalPages;
} else if (pageIndex < 1) {
pageIndex = 1;
}
//获得数据
List<Message> messages = mb.getPagingNews(pageSize, pageIndex);
分割线——我是分割线——
<%
for (Message mes : messages) {
out.print("<ul>");
out.print("<li>作者是:" + mes.getAuthor()+"</li>");
out.print("<li>" + mes.getMessage()+"</li>");
out.print("<li>发表于:" + mes.getPostTime()+"</li>");
out.print("</ul>");
}
%>
<a href='index.jsp?pageIndex=1'>首页</a>
<a href='index.jsp?pageIndex=<%=pageIndex - 1%>'>上一页</a>
<a href='index.jsp?pageIndex=<%=pageIndex + 1%>'>下一页</a>
<a href='index.jsp?pageIndex=<%=totalPages%>'>末页</a>
---------------------------------------------------------<br/>
用户名: <input type="text" name="txtUserName"/><br/>
留言信息:<textarea name="txtContext" style="width:300px;height:100px"></textarea>
<input type="submit" name="submit" value="提交"/> <br/><br/>
</body>