这里有一个,当时我用Hibernate做的,如果有啥不明白的,继续留言
index是偏移,具体可以这样计算:(当前页数 - 1)每页显示的条数
count是你每页要显示多少条
你用的时候,直接把T换成是你需要查找的类,就可以啦
public List<T> getAll(int index, int count) {
final String hql = "from T where条件";
final int offset = index;
final int length = count;
List<T> list = getHibernateTemplate()executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
Query query = sessioncreateQuery(hql);
querysetFirstResult(offset);
querysetMaxResults(length);
List list = querylist();
return list;
}
});
return list;
}
/
分页代码
@author Star
@version 10 2008/07/08
/
public class CutPage implements Serializable{
private static Log log = LogFactorygetLog(CutPageclass);
private int curPageNo = 0; // 当前页数,从0开始
private int size = 0; // 所有数据条数
private String url; // 页面跳转的路径
private List showList; // 当前页面需要显示的数据列表
private int pageSize = 20;// 每页显示的数据条数
private int groupSize = 1;// 多少页为一组
private String pageNavigation;// 导航条
/
每次通过sql语句从数据库里面分组取出需要显示的数据
@param request
javaxservlet> }
太多了,贴不下,见附件
hibernate
有分页的查询函数可用
搜索后分页:
在页面中使用隐藏域,
搜索之后,返回的页面中隐藏域保存了搜索的信息,
而分页的链接-》执行函数将
隐藏域中的搜索信息
+
页码
作为参数传递至后台,由后台进行查询~~
往后台传字符串乱码问题?
你的页面是什么编码?执行请求是get
还是post方法,get方法的话需要注意url中包含中文字符的问题,可以先将其转为iso8859-1再发送请求。
在后台获取到中文信息出现乱码的话,可以使用一个全局的过滤器,将
请求中的编码信息设置为页面所用的编码,此后再获取信息时,控制器将自动进行编码转换了(如iso8859-1
到gbk的转换)。
强烈建议数据库、程序、页面都使用utf8的编码!
如果不用隐藏域的话,用cookie去控制~~
用top top 吧
我只举例了:以sqlServer吧
select top A from student where id not in (select top A(B-1) id from student);
A是每页的数目,B是页码
这句sql语句的子查询意思就是:查询前A(B-1)条数据的id
而整个sql语句查询的是id不再这个子查询范围内的前A条数据
也就是说,第一页 每页10条数据,
子查询查出 10(1-1) = 0条数据,也就是第一页应该是整个表中的最前面10条数据
而第二页就是 10(2-1) = 10 ,也就是这一次查询出前10条数据时过滤掉第一页的数据的
其实如果用了hibernate 会发现,有现成的方法
Query对象
querysetFirstResult(A);//设置当前页码,从0开始
querysetMaxResults(B);//设置每页显示数目
<head>
<%
const MaxPerPage=20
dim sql
dim rs
dim totalPut
dim CurrentPage
dim TotalPages
dim i,j
%>
</head>
<body>
<%
conn = "DBQ=" + servermappath("wj028mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (mdb)};"
sql = "SELECT FROM USER order by id desc"
set rs=servercreateobject("adodbrecordset")
rsopen SQL,conn,1,1
rsMoveFirst
rspagesize=MaxPerPage
howmanyfields=rsFieldsCount-1
If trim(Request("Page"))<>"" then
CurrentPage= CLng(request("Page"))
If CurrentPage> rsPageCount then
CurrentPage = rsPageCount
End If
Else
CurrentPage= 1
End If
if rseof then
responsewrite "<p align='center'>没有记录!</p>"
else
totalPut=rsrecordcount
if CurrentPage<>1 then
if (currentPage-1)MaxPerPage<totalPut then
rsmove(currentPage-1)MaxPerPage
dim bookmark
bookmark=rsbookmark
end if
end if
dim n,k
if (totalPut mod MaxPerPage)=0 then
n= totalPut \ MaxPerPage
else
n= totalPut \ MaxPerPage + 1
end if%>
<% i=0
do while not rsEOF and i<maxperpage
%>
<%
rsmovenext
i=i+1
loop
%>
第<%=currentpage%>页
共<%=n%>页
<%
k=currentpage
if k<>1 then
responsewrite "[<b>"+"<a href='listasppage=1'>首页</a></b>]"
responsewrite "[<b>"+"<a href='listasppage="+cstr(k-1)+"'>上一页</a></b>]"
else
ResponseWrite "[首页][上一页]"
end if
if k<>n then
responsewrite "[<b>"+"<a href='listasppage="+cstr(k+1)+"'>下一页</a></b>] "
responsewrite "[<b>"+"<a href='listasppage="+cstr(n)+"'>尾页</a></b>] "
else
ResponseWrite "[下一页][尾页]"
end if
%>
<%
end if
set rs=nothing
set conn=nothing
%>
</body>
分页最重要的是原理:
就是读取你所想要的数据,那最重要的就是sql语句的写法,如果是使用sqlserver数据库
分页的写法 select top 10 from 表 where id not in(select top10 id from 表)这里假定每页显示10条数据,这里读取的是第二页的数据,如果读取第三页的数据,子查询里面就变成 top 20 ,总结为(页数-1)当前页面的条数,希望能对有帮助。
//============分页功能===============
int pageSize=3; //一页显示几条记录
int pageNow=1; //希望显示第几条记录
//动态的接收pageNow
String sPageNow=reqgetParameter("pageNowok");
if(sPageNow!=null){
pageNow=IntegerparseInt(sPageNow);
}
//调用UserBeanC1
UserBeanC1 ubc = new UserBeanC1();
ArrayList al =ubcgetResultByPage(pageNow,pageSize);
pwprintln("<table border=2>");
pwprintln("<tr><th>id</th><th>name</th><th>passwd</th><th>mail</th><th>grade</th><th>修改用户</th><th>删除用户</th></tr>");
for(int i=0;i<alsize();i++){
UserBean ub = (UserBean)alget(i);
pwprintln("<tr>");
pwprintln("<td>"+ubgetUserId()+"</td>");
pwprintln("<td>"+ubgetUserName()+"</td>");
pwprintln("<td>"+ubgetPasswd()+"</td>");
pwprintln("<td>"+ubgetMail()+"</td>");
pwprintln("<td>"+ubgetGrade()+"</td>");
pwprintln("<td><a href=>修改</a></td>");
pwprintln("<td><a href=delUserC1userId="+ubgetUserId()+" onclick=\"return windowconfirm('确认删除吗')\">删除</a></td>");
pwprintln("</tr>");
}
pwprintln("</table>");
//上一页
if(pageNow!=1){
pwprintln("<a href=welpageNowok="+(pageNow-1)+">上一页</a>");
}
//显示超链接
for(int i=pageNow;i<=pageNow+pageSize+1;i++){
pwprintln("<a href=welpageNowok="+i+">"+i+"</a>");
}
int pageCount=ubcgetPageCount();
//下一页
if(pageNow!=pageCount-4){
pwprintln("<a href=welpageNowok="+(pageNow+1)+">下一页</a><br>");
}
pwprintln("<br>该网页被访问了"+thisgetServletContext()getAttribute("visitTimes")toString()+"次<br>");
pwprintln("您的IP地址是:"+reqgetRemoteAddr()+"<br>");
pwprintln("您的机器名是:"+reqgetRemoteHost()+"<br>");
pwprintln("</center><hr><img src=imgs/1gif><br>");
pwprintln("</body>");
方法太多了
如果是jdbc的话
分两方面:1数据库分页
2代码分页
如果是框架持久层的话
一般持久层的查询对象都要相关方法设置
比如设置一次取多少
从那条记录开始取
还可以去引入一些外部分页的jar包
----------------------------------------------
总体思想是这样的:
首先肯定需要几个参数:请求的页数,一页显示多少条数据数据库真实的条数
首先查出所有数据放入一个集合里面,当然如果数据更新次数少竟然用缓存
然后根据数据库总条数与每页显示条数得到真正的页数
根据一页条数和请求的页可以得到一个查询的范围。
在这个范围内,把数据从刚才那个集合里取出放入一个新的集合前台要显示的就是这个集合的数据
至于导航,自然就是页数的加减了
具体代码,有兴趣发邮件我,我可以给你几个例子的做法kyoxue@126com
以上就是关于java实现分页全部的内容,包括:java实现分页、java中如何实现百度中的分页、JAVA如何实现网页分页功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)