查询结果分页显示的问题学习笔记

查询结果分页显示的问题学习笔记
要求:进入页面后默认显示数据库中的全部记录,可用右下方的分页链接(上一页,下一页)进行分页。在页面上方有一查询,输入查询条件提交后页面(同一个页面上)转为显示查询出的结果,分页链接此时对查询出的结果起作用。

错误的思路:进入页面后默认sql语句为String sql="select * from table";显示全部记录,然后判断用户是否点击了查询按钮,若点击,则将查询条件改为String sql="select userName from table where userName like '%"+name+"%'";(使用的是模糊查询)。

且不说程序最后是否能达到我们预料的结果,单单这个判断,就会让我们感到有点棘手。因为我们点击“查询”按钮后,查询结果确实是我们所希望的结果。但不幸的是,此时你点分页链接后,本来我们期望的是对查询出的结果进行分页,但事与愿违,它翻到了全部记录的第二页,而不是你查出来的结果的第二页。

为什么会这样了?因为你点击“下一页”链接后,此时你没有点击“查询”按钮了吧。于是查询条件又变为默认的String sql="select * from table";页面接收到了你链接里传过来参数intPage(下一页),因此,很自然,显示的是全部记录的第二页了,而不是查询出来结果的第二页了。

也有人会这么想,我在点击查询按钮后,用一个标记flag来标明查询按钮已被点击,然后在链接按钮里将此flag也作为参数传递,接收到后再根据flag的值判断执行哪个查询条件。(这也是我第一次做的时候用的方法)。但无一例外,这种也失败了。(限于篇幅,就不再此多说了,下面开始正文了)。

其实我们一直存在一个误区,如果你这么想:显示全部结果和显示查询结果的其实就是在执行一条sql语句String sql="select userName from table where userName like '%"+name+"%'";只是在显示全部结果的时候,这个name是空而已,而你第一次进入页面时它确确实实是空的。如此,这个问题就简单多了。

还有个问题,当我们点击分页链接后,页面刷新,我们输入的查询条件丢失了,完了,又转为输入全部记录的第二页了。怎么办啊???

绑定!!通过request.getParameter("name")获得你填写的查询条件,然后输入到你的textbook的value中,当点击链接后,反复对表单进行提交,如此就能保证输入值不会丢失了。另外在分页链接中,当当前页为第一页或最后一页时,上一页和下一页可通过以下技巧处理。

<%
if(intpage>1){
%>
[上一页]
<%
}
else{
%>

[上一页] 
<%
}
//判断“下一页”链接是否显示
if(intpage{
%>
[下一页]
<%
}
else{
%>
[下一页] 
<%
}
%>

对查询结果分页的sql语句如下:

int start = (intpage - 1) * pageSize + 1;//一页中显示的起始索引
int end = intpage * pageSize;//一页中显示的最后索引

//str_sel为你的查询语句
String sql = "select * from ( select row_.*, rownum rownum_ from ("
+ str_sel + " ) row_ ) where rownum_ <= '" + end
+ "' and rownum_ >='" + start + "'";

相关文档
最新文档