分页查询
来源:互联网 发布:java学员信息管理系统 编辑:程序博客网 时间:2024/06/16 19:03
分页查询其实和其他的没什么区别,主要区别在一个地方,就是查询语句不通,分页查询可能比较麻烦一点,下面来说一下该如何实现我们的分页查询功能:
一、代码展示
1、封装分页实体PageModel,保存一些分页查询的基本信息
/** * 封装分页信息 */</span> public class PageModel { //结果集</span> private List list; //查询记录数</span> private int totalRecords; //每页多少条数据</span> private int pageSize; //第几页</span> private int pageNo; //总页数</span> public int getTotalPages(){ return (totalRecords+pageSize-1)/pageSize; } //取得首页</span> public int getTopPageNo(){ return 1; } //取得尾页</span> public int getButtomPageNo(){ return getTotalPages(); } //上一页</span> public int getPreviousPageNo(){ if (pageNo<=1){ return 1; } return pageNo-1; } //下一页</span> public int getNextPageNo(){ if (pageNo>= getTotalPages()){ return getTotalPages(); } return pageNo+1; } 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>
2、编写分页查询方法
/** * 分页查询 * @param pageNo 第几页 * @param pageSize 每页多少条数据 * @return pageMode */ public PageModel findUserList(int pageNo,int pageSize){ //利用StringBuffer存放分页查询语句 StringBuffer sbSql=new StringBuffer(); sbSql.append("select user_id,user_name,password,contract_tel,email,create_date ") .append("from ") .append("( ") .append("select ROWNUM rn,user_id,user_name,password,contract_tel,email,create_date ") .append("from") .append("( ") .append("select * from T_USER where USER_ID<>'root' ORDER BY USER_ID ") .append(") where ROWNUM <= ? ") .append(") where rn > ? "); //创建Connection对象和PreparedStatement对象 Connection conn=null; PreparedStatement pstmt=null; //创建ResultSet存放查询结果 ResultSet rs=null; PageModel 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 userList=new ArrayList(); //处理查询结果 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("CONTRACT_TEL")); user.setEmail(rs.getString("EMAIL")); user.setCreateDate(rs.getTimestamp("CREATE_DATE")); userList.add(user); } pageModel=new PageModel(); 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); } //返回分页查询结果pageModel return pageModel; } public int getTotalRecords(Connection conn) throws SQLException { String sql="select count(*) from t_user where user_id <> 'root'"; PreparedStatement pstmt=null; ResultSet rs=null; int count=0; try{ pstmt=conn.prepareStatement(sql); rs=pstmt.executeQuery(); rs.next(); count=rs.getInt(1); }finally{ DbUtil.close(rs); DbUtil.close(pstmt); } return count; }
二、功能分析
综合上面的东西,其实分页查询本质上就是一个查询语句的事:
《第三部分表3--开始》
select user_id,user_name,password,contract_tel,email,create_date from
(《第二部分表2--开始》select ROWNUM rn,user_id,user_name,password,contract_tel,email,create_date from(《第一部分表1---开始》
select * from T_USER where USER_ID<>'root' ORDER BY USER_ID《第一部分表1---结束》)where ROWNUM <= (pageNo * pageSize)《第二部分表2--结束》) where rn > (pageNo-1)*pageSize《第三部分表3--结束》
三、总结:由上面可知,分页查询其实就是表的嵌套查询,第一步:先将要查询的内容查出来,如第一部分;第二步:在去掉大于最大记录的那部分记录,如第二部分;第三步:在将小于最小记录的那部分去掉,如第三部分。掐头去尾,剩下的正好是我们所需要的分页查询数据。
2 0
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- 分页查询
- eclipse正则表达式插件regex util
- 类模板示例及类中成员函数的模板化
- OFBiz学习笔记(一)
- OpenVPN 的握手协议分析
- Android 手机屏幕px转dp和dp转px工具类
- 分页查询
- iOS开发-widget基础
- eclipse搭建Python, Ruby开发环境
- ZigZagConversion
- 关于new Handler().postDelayed()
- 修改 OpenVPN 实现加密算法的自动协商
- 第三章第41题
- java string类型转换boolean类型
- SharePoint 2013 开发——构建工作流开发环境