使用DB2作为后端在jsp上进行分页

时间:2009-10-02 05:32:29

标签: java performance jsp java-ee db2

我正从数据库中检索数千行,但我想在一个jsp上只显示大约200行。我通过创建指向下一行的链接来使用分页。

目前使用DB2,我唯一能做的就是FETCH FIRST 200行。所以当我到达第5页时,我正在做一个FETCH FIRST 1000行,然后我显示800到1000.

任何人都可以提出更好的解决方案,无论是从jsp,还是从DB角度来看?

这些是只读记录,即我只显示它们。此外,这些页面不在会话或任何内容中,因此我不想保留任何游标。

感谢。

2 个答案:

答案 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

这至少可以减少通过网络发送的流量。