分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 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条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来
分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 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是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
自己写的话,其实也很简单:
第一中就是,你先将所有的数据都取出来,在程序中将这个LIST,根据每页几条分成几段,页面上传过来页码就直接调用LIST就行;你可以写个方法 根据页码到整个LIST中取出当前页需要显示的数据就,可以了
第二种就是,根据页码 来设置数据数据库中查询的行数从几行到几行;也不难
第一种是在程序里分,第二种是在数据库中分;
推荐用第一种哈,少访问几次数据库;呵呵
在项目中,分页是一个项目中必不可少的,它可以防止我们从数据库中进行大量数据查询时速度变慢,提高我们的查询效率
1、定义分页模型:PageModel
package comcommonpage;
import javautilList;
/
封装分页信息
@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<E> getList() {
return list;
}
public void setList(List<E> list) {
thislist = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
thistotalRecords = totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
thispageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
thispageNo = pageNo;
}
}
2、分页测试:在MySQL中建立admin表,里面有字段id、name、password
3、简历Admin的实体bean类:
package comcommonpage;
public class Admin {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
}
4、测试调用: package comcommonpage;
import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
import javautilArrayList;
import javautilList;
import comcommondbDbUtil;
public class Client {
public static PageModel findAdmins(int pageNo,int pageSize){
Connection conn=DbUtilgetConnection();
String sql="select from admin limit ,";
PageModel pageModel=null;
PreparedStatement pstm=null;
ResultSet rs=null;
Admin admin=null;
List<Admin> list=new ArrayList<Admin>();
try {
pstm=connprepareStatement(sql);
pstmsetInt(1, (pageNo-1)pageSize);
pstmsetInt(2, pageNopageSize);
rs=pstmexecuteQuery();;
while(rsnext()){
admin=new Admin();
adminsetId(rsgetInt("a_id"));
adminsetName(rsgetString("a_name"));
adminsetPassword(rsgetString("a_pwd"));
listadd(admin);
}
ResultSet rs2=pstmexecuteQuery("select count() from admin");
int total=0;
if(rs2next()){
total=rs2getInt(1);
}
pageModel=new PageModel();
pageModelsetPageNo(pageNo);
pageModelsetPageSize(pageSize);
pageModelsetTotalRecords(total);
pageModelsetList(list);
} catch (SQLException e) {
eprintStackTrace();
}finally{
DbUtilclose(conn);
DbUtilclose(pstm);
DbUtilclose(rs);
}
return pageModel;
}
public static void main(String[] args) {
PageModel pageModel=ClientfindAdmins(2,4);
List<Admin> list=pageModelgetList();
for(Admin a:list){
Systemoutprint("ID:"+agetId()+",用户名:"+agetName()+",密码:"+agetPassword());
Systemoutprintln();
}
Systemoutprint("当前页:"+pageModelgetPageNo()+" ");
Systemoutprint("共"+pageModelgetTotalPages()+"页 ");
Systemoutprint("首页:"+pageModelgetTopPageNo()+" ");
Systemoutprint("上一页:"+pageModelgetPreviousPageNo()+" ");
Systemoutprint("下一页:"+pageModelgetNextPageNo()+" ");
Systemoutprint("尾页:"+pageModelgetBottomPageNo()+" ");
Systemoutprint("共"+pageModelgetTotalRecords()+"条记录");
Systemoutprintln();
}
}
这样分页效果就实现了,我们要实现分页效果,只要传入相应的参数和相应的数据库执行语句即可实现,希望大家能灵活运用。
在用jdbc访问某个数据库,并读出一个resultset数据记录集时,如果记录数太大,则会占用客户端(运行java程式的机器)的大量内存(如果客户端是某个大企业的营业部门的代理点分机,则有可能java程式会占用完全部内存,然后报错),并且会造成客户端负载过重,运行速度极度缓慢(在sybase数据库中,我曾做过一个测试。选择某个大数据记录,sql语句运行完需要4分钟,而在java客户端完全显示出来,则需要将近10分钟)。解决方案:
给用户提供一个可选择分页显示的选项,如果用户不想分页显示则完全显示,否则分页显示。
1定义一个分页数全局常量,即每页显示的数据条数。
private final static int skip = 100;
2定义一个确定某个分页条数的全局变量,即该显示页的当前显示数据条数。
private static int cur = 0;
3定义一个resultset全局变量,以便多次使用
private static javasqlresult rs = null;
4打开一个数据库连接[/pre]
classforname( sqldriver );javasqlconnection conn = drivermanagergetconnection( url, (string)username,(string)passwd)statement stmt = conncreatestatement();string searchsql = "";rs = stmtexecutequery(searchsql);
以上就是关于java查询的分页思路!!全部的内容,包括:java查询的分页思路!!、java的jsp如何分页显示查询结果、java&sql的分页怎么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)