唯倚社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 246|回复: 5

分页显示数据----后台(将数据库中的信息分页显示到网页)

[复制链接]

59

主题

169

帖子

754

积分

版主

Rank: 7Rank: 7Rank: 7

积分
754
发表于 2017-9-16 17:34:19 | 显示全部楼层 |阅读模式

轻松玩转社区

您需要 登录 才可以下载或查看,没有帐号?立即注册

x


问题分析:
 当我们想检索数据库中的信息并将其显示到网页上时,如果数据库中的信息过多时 。一方面会使数据库开销非常大,降低性能;另一方面在一张页面上显示过多数据也会降低用户体验。

解决办法: 
  1.由于在分页之后每一页显示的信息不再仅仅是数据空中的数据而是类似于下图:

  1)所以我们需要创建一个page类:

[Java] 纯文本查看 复制代码
1     package com.neuedu.manage.bean;
 2 
 3     import java.util.List;
 4 
 5     public class page <T>{
 6         private List<T> data;//数据库查询出的数据
 7         private int totalRecord;//总记录数,数据库查询
 8     
 9         private int pageNumber;//当前页码
10         private int pageSize;//每页的记录数
11     
12         private String path;//jsp页面链接所要跳转的地址
13     
14     //  private int index;    //当前索引,计算得到
15     //  private int totalPage;//总页数 计算得到
16    
17     } 



   2)其中我们为前5个变量创建GET和SET方法;由于后两个变量是计算得到的,只为他们创建GET方法:
[Java] 纯文本查看 复制代码
 1      public int getIndex() {
 2             /**
 3              * 当前索引值,计算得到的
 4              */
 5             return (getPageNumber()-1)*pageSize;
 6         }
 7   
 8         public int getTotalPage() {
 9             /**
10              * 总页数
11              */
12             if(totalRecord%pageSize==0){
13                 return totalRecord/pageSize;
14             }
15             return (totalRecord/pageSize +1);
16         }




   3)为page创建一个有参构造函数
[Java] 纯文本查看 复制代码
1   public page( int pageNumber, int pageSize ,int totalRecord) {
2         super();
3             this.pageNumber = pageNumber;
4             this.pageSize = pageSize;
5             this.totalRecord = totalRecord;
6       }



    2.dao层代码:根据当前索引值和每页的记录数将结果查询出来,然后将其封装成user对象并保存到Student类的LIst链表中,将其返回。
[Java] 纯文本查看 复制代码
 1     public List<Student> getLimitStuList(int index, int pageSize) {
 2         JDBCUtil jdbcUtil=new JDBCUtil();
 3         Connection con = jdbcUtil.getConnection();
 4         PreparedStatement pst=null;
 5         ResultSet rSet=null;
 6         List<Student>list= new ArrayList<Student>();
 7         String sql="SELECT * FROM students limit ?,?";
 8         try {
 9             pst = con.prepareStatement(sql);
10             pst.setInt(1, index);
11             pst.setInt(2, pageSize);
12             rSet = pst.executeQuery(); 
13             while(rSet.next())
14             {
15                 int id=rSet.getInt("id");
16                 String name=rSet.getString("name");
17                 String school=rSet.getString("school");
18                 double score=rSet.getDouble("score");
19                 list.add(new Student(id, name, school, score));
20             }    
21         } catch (SQLException e) {
22             e.printStackTrace();
23         } finally{
24             JDBCUtil.close(con, pst, rSet);
25         }
26         System.out.println(list);
27         return list;    
28     }





   3.service层代码:查询数据库中的数据并将其放入page对象。
[Java] 纯文本查看 复制代码
 1   public class studentService {
 2       private studentDao studentDao=new studentDao();
 3       public page<Student> getStudentList(int pageNo, int pageSize){
 4           //查询当前表的所有记录数
 5           int totalRecord = studentDao.getTotalRecord();
 6           //调用有参构造函数,创建page对象
 7           page<Student> page=new page<Student>(pageNo,pageSize,totalRecord);
 8           //第三步,查询分页列表数据并设置到page对象中
 9           List<Student> list=studentDao.getLimitStuList(page.getIndex(),page.getPageSize());
10           System.out.println(list);
11           page.setData(list);
12           return page;
13       }
14   }





  4.我们为jsp页面上的链接所要跳转的路径编写一个工具类,并将其放在util包下。
[Java] 纯文本查看 复制代码
 1   //获取截取路径
 2     public class WEBUtils {
 3         public static String grtPath(HttpServletRequest request) {
 4             String requestURI = request.getRequestURI();//请求路径
 5             String queryString = request.getQueryString();//请求参数
 6             System.out.println("请求URI"+requestURI+"?"+queryString);
 7             String url=requestURI+"?"+queryString;
 8             if(url.contains("?pageNo")){
 9                 url=url.substring(0, url.indexOf("?pageNo"));
10             }
11             return url;
12         }
13     }




  5.创建一个servlet,用于接收jsp页面的分页查询数据的请求。
[Java] 纯文本查看 复制代码
 1   @WebServlet("/studentCheck")
 2   public class studentCheck extends HttpServlet {
 3       private static final long serialVersionUID = 1L;
 4       private static int pageSize=2;//每页记录数
 5       private static int pageNo=1;//当前页码
 6       private studentService service= new studentService();
 7       public studentCheck() {
 8           super();
 9       }
10       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
11           try{
12               pageNo=Integer.parseInt(request.getParameter("pageNo"));//链接所要跳转的"当前页码", 当jsp页面的a标签发生跳转时,从地址栏直接携带过来
13               }catch (Exception e) {
14                   e.getMessage();
15               }
16           String url = WEBUtils.grtPath(request);//获取当前请求路径
17           page<Student> page= service.getStudentList(pageNo,pageSize);
18           page.setPath(url);//创建page对象
19           request.setAttribute("page",page);//将page对象放入请求域
20           request.getRequestDispatcher("/WEB-INF/view/stu-list.jsp").forward(request, response);
21       }
22 
23       protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
24           request.setCharacterEncoding("utf8");
25           doGet(request, response);
26       }
27 
28   }



  至此,我们基本完成分页显示的后台代码。接下来还要完成前端网页的显示,请见下篇。


[发帖际遇]: 芒果酱 被钱袋砸中进医院,看病花了 5 E币. 幸运榜 / 衰神榜

35

主题

176

帖子

2383

积分

LV3

Rank: 3Rank: 3

积分
2383
发表于 2017-9-23 11:09:38 | 显示全部楼层
我最喜欢回复人少的贴子了,如果贴子沉了,我就会觉得是自己弄沉的,非常有成就感!
回复

使用道具 举报

31

主题

151

帖子

812

积分

版主

Rank: 7Rank: 7Rank: 7

积分
812
发表于 2017-9-23 14:47:54 | 显示全部楼层
吊炸天的xx
回复

使用道具 举报

0

主题

108

帖子

249

积分

版主

Rank: 7Rank: 7Rank: 7

积分
249
发表于 2017-9-23 14:49:28 | 显示全部楼层
有钱就是大爷,欠钱不还的更是
回复

使用道具 举报

3

主题

113

帖子

184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
184
发表于 2017-9-23 20:59:24 | 显示全部楼层
呵呵
回复

使用道具 举报

21

主题

148

帖子

1167

积分

超级版主

Rank: 8Rank: 8

积分
1167

最佳新人

发表于 2017-9-24 09:37:22 | 显示全部楼层
第一次评论啊,好紧张啊,该怎么说啊,打多少字才显的有文采啊,这样说好不好啊,
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|weiecn ( 湘ICP备14002058号 )

GMT+8, 2018-10-23 09:05 , Processed in 0.086625 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表