在实际开发一定避免不了使用分页,现在我们就来讲一个比较简单的分页处理。
首先我们定义四个分页变量:
pageNow 表示当前第几页,该变量是由用户来决定的。
pageSize 每页显示几条记录,由程序指定,也可以由用户定制。
pageCount 表示一共有多少页,该变量是通过计算出来的。
rowCount 一共有多少条记录,该变量是查询数据库得到的。
首先,我们得确定pageCount的大小:
1 2 3 4 5 | if(rowCount%pageSize==0){ pageCount = rowCount/pageSize; }else{ pageCount = rowCount/pageSize+1; } |
上面的算法等价于
1 | pageCount=rowCount% pageSize==0 ?rowCount/pageSize: rowCount/pageSize+1; |
(三目运算)
更简单的算法是:
1 | pageCount=(rowCount-1)/pageSize+1; |
如下是分页的主要代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | Connection ct = null; ResultSet rs = null; PreparedStatement ps = null; //定义分页需要的变量 int pageNow = 1;//当前页 String sPageNow = request.getParameter("pageNow"); //接受用户传递过来的pageNow if(sPageNow != null){ pageNow = Integer.parseInt(sPageNow); } int pageSize = 3;//指定每页显示3条记录 int pageCount = 1;//该值是计算出来的 int rowCount = 1;//共有多少记录,数据库查询得到的 try{ //1加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //2.得到连接 ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCLLPQ","scott","tiger"); //3.查询rowCount ps = ct.prepareStatement("select count(*) from users"); rs = ps.executeQuery(); rs.next(); rowCount = rs.getInt(1); pageCount=rowCount% pageSize==0 ?rowCount/pageSize: rowCount/pageSize+1; //4.创建PreparedSatement ps = ct.prepareStatement("select top "+pageSize+" * from users where userId not in " + "(select top "+ pageSize*(pageNow-1)+" userId from users)"); rs = ps.executeQuery(); //5.显示数据 ........ //6.显示页码 //上一页 if(pageNow !=1) out.println("<a href=welcom?pageNow="+(pageNow-1)+" >上一页</a>"); //显示超链接 for(int j = pageNow;j<=pageNow+pageSize-1; j ++) { out.println("<a href=welcom?pageNow="+j+" > <"+j+"> </a>"); } //下一页 if(pageNow != pageCount) out.println("<a href=welcom?pageNow="+(pageNow+1)+" >下一页</a><br><br>"); } |
上面只写了主要的代码,数据展示代码,还有关闭数据库连接的代码都没写,大家在实际编写中注意加上!
当然,我们实际开发中的分页查询和展示代码不会写在一起,我们通常把查询总页面和某一页具体数据的代码封装到相应的Dao里面,不要把业务逻辑和界面的代码混在一起。
不同的数据库,在做分页查询的时候sql是不一样的。
MySql数据库:
【SELECT 字段名列表 FROM 表名 LIMIT pageSize*(pageNow-1),pageSize】
SQLServer数据库:
【select top pageSize * from users where id not in
(select top pageSize*(pageNow-1) id from 表名)】
如果测试时,出现显示不正确的情况,可以把pageNow,sql 语句相关的信息打印出来就能发现问题了。
除非注明,Coder文章均为原创,转载请以链接形式标明本文地址