在获取完所有的list后只需要截取你所需要的一部分list就可以了,所以要知道你所需要的是从哪里开始,到哪里结束。
有很多种方法,如果只是JSP里的话可以再次遍历获取的所有list集合,然后把满足条件的截取出来,开始的list下标应该是:(你要查询的页数-1)*页面要显示的数据条数,也就是你这里的(page-1)*pageRows,结束的地方也就是page*pageRows-1了。//这样应该可以写出来了吧
建议把这个方法封装到一个类里面,一个方法就实现一种功能。
当然这是比较麻烦的,现在流行框架,以后会学到的,在hibernate框架里用query语句很容易就实现了,现在时间多,
多看看hibernate框架吧,推荐你一本书,hibernate
in
action,有中文版的。这个是你们以后入门了hibernate后看的。
public
List
listOrderByItem(int
pageRows,int
page)
{
//page是要显示的页数,pageRows是你要显示的行数
Session
session
=
this.getSession();//获取hibernate的session,hibernate自动生成的DAO里包含
String
hql
=
"from
TBL_storage
as
tbl_s
order
by
item";//hql语句
Query
query
=
session.createQuery(hql);//hibernate的query,通过session创建
query.setFirstResult((page-1)*pageRows);//设置开始的下标
query.setMaxResults(pageRows);//设置每页显示的行数
return
query.list();//得到所需要的结果集
}
⑵ JSP分页显示数据库中的表格内容
处理方式:
一:首先抄sql语句,袭使用not in的方式处理,
在类里写一个方法
public List<> getAllByPage(int pageSize,pageNum){
......
String sql="select top"+pageSize +" * from 表名x where 字段A not in (select top "+pageSize*(pageNum-1)+" 字段A from 表名x)";
.......
rerun list;
}
其中,pageSize是页面要显示的条数,pageNum是要显示的页码,sql语句是固定的,返回一个list对象。
二:在Biz里写一个方法,调用Dao里的getAllByPage方法,传入两个参数,返回list结果集。
三:在jsp页面以url传参的方式进行页面处理和数据的显示。
使用request对象获取传入的值,进行强制类型转作为参数,传入到Biz业务类的方法中处理,返回list结果集,使用表达式的方式在页面中进行显示。
⑶ jsp中如何分页显示查询到的数据
jsp中分页显示查询到的数据是通过foreach标签控制的,一般是显示首页,下一页,上一页,尾页这些连接项。
1、构建一个PageControl对象将分页所涉及到的一些关键的"控制数据"予以封装.
⑷ 关于servlet与jsp之间实现数据库结果分页显示,帮忙调试
你们这样分页肯定有问题,如果数据量小还可以,数据量稍微大一点你的程序就完专了,属你是把表里的数据全都查出来了吧?内存是有限的,像你这样,会把服务器搞垮,好的分页方法是看第几页就去数据库里查第几页,应该在sql语句上下一点功夫。给你写个sql的公式:
select top 每页显示数量 * from 表 where 条件 and 主键 not in ( select top (当前页-1)*每页显示数量 主键 from 表 where 条件 order by 主键 desc) order by 主键 desc
要注意的是这个适用于access和sqlserver,外面的select和里面的select的条件、排序应该保持一致。像这样的话,jsp页面就好写多了。
还有在servlet里最好把rs的内容都存到一个集合里面,然后在jsp里循环集合就可以了,这样在jsp之前就可以关闭rs,和关闭连接,要不然占的资源不可想象。
⑸ 看看JSP中怎样实现分页显示
<%! int pageSize=4;
int pageCount;
int showPage;
%>
<!-- 连接数据库并从数据库中调取记录-->
<%
Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
}
try{con=DriverManager.getConnection("jdbc:mysql://localhost:3306/message board","root","123456");
sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
//返回可滚动的结果集
rs=sql.executeQuery("select * from messageinfo");
//将游标移到最后一行
rs.last();
//获取最后一行的行号
int recordCount=rs.getRow();
//计算分页后的总数
pageCount=(recordCount%pageSize==0)?(lastRow/pageSize):(lastRow/pageSize+1);
//获取用户想要显示的页数:
String integer=request.getParameter("showPage");
if(integer==null){
integer="1";
}
try{showPage=Integer.parseInt(integer);
}catch(NumberFormatException e){
showPage=1;
}
if(showPage<=1){
showPage=1;
}
if(showPage>=pageCount){
showPage=pageCount;
}
//如果要显示第showPage页,那么游标应该移动到的position的值是:
int position=(showPage-1)*pageSize+1;
//设置游标的位置
rs.absolute(position);
//用for循环显示本页中应显示的的记录
for(int i=1;i<=pageSize;i++){
%>
<table>
<tr>
<th><%=rs.getString("UserName") %></th>
<td>发表于:<%=rs.getString("datetime") %></td>
</tr>
<tr >
<th colspan="3"><textarea><%=rs.getString("content") %></textarea></th>
</tr>
</table>
<%
rs.next();
}
rs.close();
con.close();
}
catch(Exception e){
e.printStackTrace();}
%>
<br>
第<%=showPage %>页(共<%=pageCount %>页)
<br>
<a href="ShowMessages.jsp?showPage=1">首页</a>
<a href="ShowMessages.jsp?showPage=<%=showPage-1%>">上一页</a>
<% //根据pageCount的值显示每一页的数字并附加上相应的超链接
for(int i=1;i<=pageCount;i++){
%>
<a href="ShowMessages.jsp?showPage=<%=i%>"><%=i%></a>
<% }
%>
<a href="ShowMessages.jsp?showPage=<%=showPage+1%>">下一页</a>
<a href="ShowMessages.jsp?showPage=<%=pageCount%>">末页</a>
<!-- 通过表单提交用户想要显示的页数 -->
<form action="" method="get">
跳转到第<input type="text" name="showPage" size="4">页
<input type="submit" name="submit" value="跳转">
</form>
⑹ 在JSP页面中实现分页显示和翻页功能,需要来回传递哪几个参数
页面分页通常有两种展现形式:
查询出全部结果数据,以集合等形式保存在内存中,每次在内存中读取一页的数据显示。该方法首次加载数据量较大,耗时会很久,而且可能展现出的数据可能包含被修改或删除过的过期或垃圾数据,存储数据也会消耗大量的内存,但首次加载后,分页展现会非常迅速,效果较好。
每次切页时从数据库中检索当前页所需展现数据,每次查询数较少,总体开销也就减少了,再进行SQL优化,也能达到较高的效率,而且实时检索不易出现数据错误的问题。
使用分页功能,最关键的参数如下:
请求参数:
1)当前需要展示的页码,变量,默认从第一页开始,可能是页面上的上下页,通过当前页码±1来计算出来,也可能是页面有页码页表用户通过点击相应数字或是输入框用户手输入的页码;
2)每页显示的数量,通常是变量,可以从页码提供相应的下拉框供用户选择。若是定义为常量,那就不需要每次传递了;
3)总数量,根据筛选条件决定,若是筛选条件固定,则只需将此定义为常量,不必作为参数传输,否则则需要根据筛选条件每次查询数据库获取计数。
返回参数:
返回需要展示的列表及以上请求参数,通常列表通过Ajax计数实现,那也就不需要返回请求参数了。所展示的列表通常会使用集合类型进行封装或是数据读取成json格式由前台进行解析。