您的位置:首页 > 编程语言 > Java开发

java+jsp实现分页查询

2015-09-25 21:09 537 查看
之前没有用java实现过分页查询,觉得分页查询很难,但是现在理解了之后,发现其实很简单,下***体来介绍下怎么实现分页查询!

原理:

做分页查询将其在界面显示,其实原理很简单,就是用sql语句将数据库中的数据查询出来,然后显示在界面上,查询的时候将页号,每页显示的数据总量,具体显示的数据都查询出来,下面看下源码:

这里的UserManager类相当于经典三层中的D层,主要是作用是对数据库的操作:

<span style="font-size:14px;">	/**
	 * 分页查询
	 * @param pageNo 第几页
	 * @param pageSize 每页多少条数据
	 * @return pageModel
	 */
	public PageModel<User> findUserList(int pageNo, int pageSize) {
		StringBuffer sbSql = new StringBuffer();	
		sbSql.append("select user_id, user_name, password, contact_tel, email, create_date ")
			.append("from ")
			.append("( ")
			.append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ")
			.append("from ")
			.append("( ")
			.append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id ")
			.append(")  where rownum <= ? ")
			.append(")  where rn > ? ");
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		PageModel<User> pageModel = null;
		try {
			conn = DbUtil.getConnection();
			pstmt = conn.prepareStatement(sbSql.toString());
			pstmt.setInt(1, pageNo * pageSize);
			pstmt.setInt(2, (pageNo - 1) * pageSize);
			rs = pstmt.executeQuery();
			List<User> userList = new ArrayList<User>();
			while (rs.next()) {
				User user = new User();
				user.setUserId(rs.getString("user_id"));
				user.setUserName(rs.getString("user_name"));
				user.setPassword(rs.getString("password"));
				user.setContactTel(rs.getString("contact_tel"));
				user.setEmail(rs.getString("email"));
				user.setCreateDate(rs.getTimestamp("create_date"));
				userList.add(user);
			}
			pageModel = new PageModel<User>();
			pageModel.setList(userList);
			pageModel.setTotalRecords(getTotalRecords(conn));
			pageModel.setPageSize(pageSize);
			pageModel.setPageNo(pageNo);
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			DbUtil.close(rs);
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		}
		return pageModel;
	}</span>


为了方便,写了一个存放所查询数来的数据的类,便于操作:

<span style="font-size:14px;">package com.bjpowernode.drp.util;

import java.util.List;

import oracle.net.aso.e;

/**
 * 封装分页信息
 * @author Administrator
 *
 */
public class PageModel<e> {

	//结果集
	private List<e> list;
	
	//查询记录数
	private int totalRecords;
	
	//每页多少条数据
	private int pageSize;
	
	//第几页
	private int pageNo;
	
	/**
	 * 总页数
	 * @return
	 */
	public int getTotalPages() {
		return (totalRecords + pageSize - 1) / pageSize;
	}
	
	/**
	 * 取得首页
	 * @return
	 */
	public int getTopPageNo() {
		return 1;
	}
	
	/**
	 * 上一页
	 * @return
	 */
	public int getPreviousPageNo() {
		if (pageNo <= 1) {
			return 1;
		}
		return pageNo - 1;
	}
	
	/**
	 * 下一页
	 * @return
	 */
	public int getNextPageNo() {
		if (pageNo >= getBottomPageNo()) {
			return getBottomPageNo();
		}
		return pageNo + 1;	
	}
	
	/**
	 * 取得尾页
	 * @return
	 */
	public int getBottomPageNo() {
		return getTotalPages();
	}
	
	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public int getTotalRecords() {
		return totalRecords;
	}

	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
}
</span>
最后就是在界面显示啦,注意看其中的代码:

<span style="font-size:14px;"><%
	int pageNo = 1;
	int pageSize = 2;
	String pageNoString = request.getParameter("pageNo");
	if (pageNoString != null) {
		pageNo = Integer.parseInt(pageNoString);
	} 
	PageModel<User> pageModel = UserManager.getInstance().findUserList(pageNo, pageSize);	
%>    </span>
<span style="font-size:14px;">function checkAll(field) {
		var selectFlags = document.getElementsByName("selectFlag");
		for (var i=0; i<selectFlags.length; i++) {
			selectFlags[i].checked = field.checked;
		}
	}

	function topPage() {
		window.self.location = "user_maint.jsp?pageNo=<%=pageModel.getTopPageNo()%>";
	}
	
	function previousPage() {
		window.self.location = "user_maint.jsp?pageNo=<%=pageModel.getPreviousPageNo()%>";
	}	
	
	function nextPage() {
		window.self.location = "user_maint.jsp?pageNo=<%=pageModel.getNextPageNo()%>";
	}
	
	function bottomPage() {
		window.self.location = "user_maint.jsp?pageNo=<%=pageModel.getBottomPageNo()%>";
	}
</span>


这里介绍的过程中显示了部分代码,也是分页查询的一种方法,其实原理很简单,大家可以试一试!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: