求教Struts分页的问题

小弟刚做J2EE开发不久,我这几天快郁闷死了我用Struts做分页有些问题。其中上页,下页,跳转功能基本实现,可就是~~举个例子吧:我表的总数量是15条的话,我在jsp页面上按每页显示10条的记录来算,到第二页应该是5条啊,可我第二页还是出来10条。我的SQL语句是:
Select top "+lineSize+" * from(Select top "+lineSize+" * from (Select top "+currentPage*lineSize+" * from Img order by id asc) temptbl1 order by id desc) temptbl2 order by id asc
其中lineSize是每页显示的页数,currentPage是当前的页码都是从servlet或者struts中传进去的参数。可我觉得是不是currentPage*lineSize出了问题啊,哪位经验高手教教我吧给我点提示。不甚感激!
我的邮箱是:Aaroncay008@hotmail.com加我做好友就更好了

你把 currentPage 跟linsize的值自己带入进去
然后看看你的sql对不对就可以了

sql语句分页的网上很多
去google就好了
你这种写法估计bill gates看完就吐血了
好不容易提高的效率基本上也白费了

我是JAVA新手,sql 语句是对的但我就是不知道怎么样才能算出下一页要显示的页数.
我在Struts中是这样写的:
int currentPage ;//当前页
int cp = cf.getCp() ;//从jsp->ActionForm传过来的跳转值
int lineSize = 10 ;//每页显示的行数
//总记录数
int allRecoreds = MydecDAO.getIn("MydecWork").getCountByImg() ;
if(cp != 0)
{
currentPage = cp ;
}
else
{
currentPage = 1 ;
}
ImgBean ib = new ImgBean() ;//业务Bean
List l = MydecDAO.getIn("MydecWork").findByAllImg(lineSize,currentPage) ;//将每页显示的行数和当前页数传进去得到一个查询全部的集合
对应方法findByAllImg()中的SQL语句:
Select top "+lineSize+" * from(Select top "+lineSize+" * from (Select top "+currentPage*lineSize+" * from Img order by id asc) temptbl1 order by id desc) temptbl2 order by id asc
如果按每页显示10条记录总记录数为15条来看的话,在第一遍执行的时候能是按每页10条来显示,在第2页我应该是5条记录才对但按我写的SQL语句中"currentPage*lineSize"来算的话也是就变成了20条了。我是不是得在Struts中加上对当前页数currentPage或每页显示页数lineSize的条件,还是这个SQL语句本身就能完成该功能。求教啊!
如果哪位高手有一个好点的通用方法,也请指出啊。最好有一个从JSP->Struts->SQL语句的简单实例,有些注释的更好啊。谢谢

sql语句是错的,我给你计算一下page = 2的时候的情况
按照3、2、1的标号顺序看


1)Select top "+lineSize+" * from(
选择前十条从刚才选择的十条里面的十条记录
2)Select top "+lineSize+" * from (
选择前十条从刚才选的记录里面,也就是前是十五条的前十条
3)Select top "+currentPage*lineSize+" * from Img order by id asc
选了最上面20条出来,可是因为只有15条记录,所以返回十五条记录
4)) temptbl1 order by id desc) temptbl2 order by id asc

那这有什么办法吗解决下吗?我想不明白了

select top pagesize b.* from (select top currpage*pagesize 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

我再试试,谢谢你.对了,你是这里面的BOSS吗?

谢谢谢谢,我的出来了我把SQL语句改了一下
select top "+lineSize+" * from img where id not in(select top "+(currentPage-1)*lineSize+" id from img order by id desc) order by id desc
就可以了!
不过我这样是不是消耗了太多的系统开销啊?
这儿能加分吗?我能给你加分吗?

我不是boss
只是一个最近在研究java
所以来这里

程序正确性是第一位的
效率要满足之后才要考虑
sql 2000 分页有更高的效率的方法
不过你如果最近专著于java不希望你来研究
在某段时间专著的研究某个东西可以更快的提升
sql也是很费时间的东西

谢谢Coolyu0916

从T-SQL看出你用的是MS的数据库.我BLOG上转载有一个文章,是以存储过程的方式实现的.当然你可以改也对应的JAVA类来生成翻页SQL.
http://blog.csdn.net/justin_579 数据库板块

[该贴被leoyu于2007年04月02日 12:32修改过]