我正从数据库中检索数千行,但我想在一个jsp上只显示大约200行。我通过创建指向下一行的链接来使用分页。
目前使用DB2,我唯一能做的就是FETCH FIRST 200行。所以当我到达第5页时,我正在做一个FETCH FIRST 1000行,然后我显示800到1000.
任何人都可以提出更好的解决方案,无论是从jsp,还是从DB角度来看?
这些是只读记录,即我只显示它们。此外,这些页面不在会话或任何内容中,因此我不想保留任何游标。
感谢。
答案 0 :(得分:5)
您可以使用“row_number()over()”构造,但它有点笨拙:
SELECT * FROM (
SELECT your_column1, your_column2, ...,
ROW_NUMBER() OVER (ORDER BY your_order_by ASC) AS rownumber
FROM your_table
) AS row_
WHERE rownumber between 200 and 400;
答案 1 :(得分:0)
我认为最好自己使用游标,这样你才真正执行一个查询。您可能没有使用大型机DB2,但LUW(Linux / Unix / Windows)版本也可能具有超时“不良行为”会话(那些持有资源锁而没有活动的会话)的功能,这会阻止孤立的游标累积
在DB2 / z中,您可以将IDTHTOIN设置为您希望用作超时的秒数,并使用COMTSTAT = INACTIVE来保护 显示某些活动的资源保留线程。
但是,正如我所说,你可能正在使用LUW版本,我不知道该版本是否具有相似的功能(如果没有,我会感到惊讶)。
如果你有一个唯一的ID可用于显示的每条记录,你可以简单地记住当前列表中最后一个的ID,而不是:
select * from tbl fetch first 200 rows only
使用:
select * from tbl where id > id_of_last fetch first 200 rows only
这至少可以减少通过网络发送的流量。