1、用Generator生成一个rownum,显然,在并发的情况下,这个办法会有很多麻烦。
2、用客户端游标忽略掉无关的行。.net 1.x的DataGrid分页就是这种方式,性能非常糟糕。
Google的结果让我瞠目结舌,原来,Firebird直接支持分页查询,但是因为没有新文档,所以我一直不知道而已。作为FB重要的查询语言功能,我居然是在Hibernate的站点上查到……原文如下:
Also Firebird supports SELECT FIRST n SKIP m <column list> FROM ...
statements. Firebird 2.0 will support ROWS clause (SELECT * FROM .. WHERE
... ORDER BY ... ROWS 10 TO 20) as an alternative to FIRST/SKIP syntax.
试验了一下,First n skip m形式会在忽略掉m行后,取前n行;而rows m to n形式,则是从第m行取到第n行。从语法的形式讲,我个人更喜欢FB2.0的形式,分页的信息从select中独立出来,更容易在应用层拼接生成。而在功能上,两者可以互相代替的:)。