本文目录一览:
java中这种分页怎么实现的
方法太多了.
如果是jdbc的话
分两方面:1数据库分页
2代码分页
如果是框架持久层的话
一般持久层的查询对象都要相关方法设置
比如设置一次取多少
从那条记录开始取
还可以去引入一些外部分页的jar包
----------------------------------------------
总体思想是这样的:
首先肯定需要几个参数:请求的页数,一页显示多少条数据.数据库真实的条数.
首先查出所有数据放入一个集合里面,当然如果数据更新次数少竟然用缓存.
然后根据数据库总条数与每页显示条数得到真正的页数.
根据一页条数和请求的页可以得到一个查询的范围。
在这个范围内,把数据从刚才那个集合里取出放入一个新的集合.前台要显示的就是这个集合的数据.
至于导航,自然就是页数的加减了.
具体代码,有兴趣发邮件我,我可以给你几个例子的做法.kyoxue@126.com
java的jsp如何分页显示查询结果?
分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 page:请求第几页,size:每页显示多少条)
业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。
数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select * from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来
Java
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
java面试的时候问到如何实现分页?
分页的实现可分为两大类相信你也懂得这个,一、数据在Java代码中进行分页,然后取得当前页数据;二、在数据库中直接取得当前页数据。
通常面试官都希望听到后者,因为那才是高效的方法。你如果想让面试官觉得你的能力高的话你就先否定他的问题,你可以回答说:“Java中根本不需要做分页的实现代码只管拿数据库中的当前页数据即可,数据分页功能应该交由SQL处理,在分页实现中Java最多只实现总页数的计算,除此以外几乎不用管。”如果你这么答的话面试官通常会问你总页数的算法,至于这个你可以网上找个高效点的方法,我现在知道最高效的就是:(数据总行数+每页数据行数-1)/每页数据行数。
算法可能有更高效的,你可以到网上找找。记住只在面试中才能这么答,笔试的话老老实实写出实现方法。否定面试官的问题会让他觉得你更professional,但不要太嚣张不然适得其反的。
通常面试如果他狂问我代码实现的话我都会要回简历走人,因为他们需要的只是一个Coder。
怎样用java实现分页显示,该怎么解决
在项目中,分页是一个项目中必不可少的,它可以防止我们从数据库中进行大量数据查询时速度变慢,提高我们的查询效率
1、定义分页模型:PageModel
package com.common.page;
import java.util.List;
/**
* 封装分页信息
* @author Administrator
*
*/
public class PageModelE {
//结果集
private ListE 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 ListE getList() {
return list;
}
public void setList(ListE 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;
}
}
2、分页测试:在MySQL中建立admin表,里面有字段id、name、password
3、简历Admin的实体bean类:
package com.common.page;
public class Admin {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4、测试调用: package com.common.page;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.common.db.DbUtil;
public class Client {
public static PageModel findAdmins(int pageNo,int pageSize){
Connection conn=DbUtil.getConnection();
String sql="select * from admin limit ?,?";
PageModel pageModel=null;
PreparedStatement pstm=null;
ResultSet rs=null;
Admin admin=null;
ListAdmin list=new ArrayListAdmin();
try {
pstm=conn.prepareStatement(sql);
pstm.setInt(1, (pageNo-1)*pageSize);
pstm.setInt(2, pageNo*pageSize);
rs=pstm.executeQuery();;
while(rs.next()){
admin=new Admin();
admin.setId(rs.getInt("a_id"));
admin.setName(rs.getString("a_name"));
admin.setPassword(rs.getString("a_pwd"));
list.add(admin);
}
ResultSet rs2=pstm.executeQuery("select count(*) from admin");
int total=0;
if(rs2.next()){
total=rs2.getInt(1);
}
pageModel=new PageModel();
pageModel.setPageNo(pageNo);
pageModel.setPageSize(pageSize);
pageModel.setTotalRecords(total);
pageModel.setList(list);
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbUtil.close(conn);
DbUtil.close(pstm);
DbUtil.close(rs);
}
return pageModel;
}
public static void main(String[] args) {
PageModel pageModel=Client.findAdmins(2,4);
ListAdmin list=pageModel.getList();
for(Admin a:list){
System.out.print("ID:"+a.getId()+",用户名:"+a.getName()+",密码:"+a.getPassword());
System.out.println();
}
System.out.print("当前页:"+pageModel.getPageNo()+" ");
System.out.print("共"+pageModel.getTotalPages()+"页 ");
System.out.print("首页:"+pageModel.getTopPageNo()+" ");
System.out.print("上一页:"+pageModel.getPreviousPageNo()+" ");
System.out.print("下一页:"+pageModel.getNextPageNo()+" ");
System.out.print("尾页:"+pageModel.getBottomPageNo()+" ");
System.out.print("共"+pageModel.getTotalRecords()+"条记录");
System.out.println();
}
}
这样分页效果就实现了,我们要实现分页效果,只要传入相应的参数和相应的数据库执行语句即可实现,希望大家能灵活运用。