java查询的分页思路!!

java查询的分页思路!!,第1张

分页显示一般有两种实现方式:业务层分页数据库层分页(以下会用到两个参数,提前说明下 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的分页怎么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10141449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存