一个简单的分页例子,采用JSP+oracle编写

思路分析:分页的原理就是,假设每页显示数据为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>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值