我用javabean处理一个form,这个form是用来设置查询条件的,比如说出生日期,年龄等。如果根据这个javabean对象查询数据库得出数据。显示的时候需要翻页。但是翻页的时候需要再一次查询数据库,但是这个时候javabean对象已经没有值了。因为它的scope=“page”。那么就会查出所有的记录。如果scope=“session”,那么比如说上次的查询条件是出生日期=“1980-1-1”,这次的查询条件是年龄=18,如果scope="session"的话,这次的查询条件就成为出生日期=“1980-1-1” and 年龄=18,不对把怎么处理这样的情况???我使用的分页存储过程:
(利用SQL的游标存储过程分页)
create  procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
 @rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
exec sp_cursorclose @P1
set nocount off

解决方案 »

  1.   

    我以前和你碰到过一样的问题,我自己写了个Page类,里面有放查询条件的一个Map变量和其他和分页有关的信息。对于查询条件的“剥离”,建议你放在“业务层”去做。
      

  2.   

    esultSet rs=cn.rsexecuteQuery("select top "+page_record+" * from tablename where id not in (select top "+(curpage*page_record)+" id from tablename order by id desc) order by id desc");
    //本查询语句得到的是所要显示的1000页的20条记录,大致思路为——子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列
      

  3.   

    rst.absolute((curPage-1)*pageSize+1),这就是传页面参数