正在阅读:解决MVC下分页显示的问题解决MVC下分页显示的问题

2005-07-12 10:07 出处: 作者:ponky 责任编辑:moningfeng

  到此为止,分页的类基本完成,这样的话可以在别的模块都可以用这个标签,同时在开发别的系统的时候这个标签也可以使用,具有比较好的可移植性。这个数据库是mysql的,要是oracle的,仅仅在PageCtBean类中的intiQuerySQL方法里面改成

protected String intiQuerySQL(String sql, int startIndex, int size){
StringBuffer querySQL = new StringBuffer();
if (size != this.MAX_PAGE_SIZE) {
querySQL.append("select * from (select my_table.*,rownum as my_rownum from(")
.append( sql)
.append(") my_table where rownum<").append(startIndex + size)
.append(") where my_rownum>=").append(startIndex);
} else {
querySQL.append("select * from (select my_table.*,rownum as my_rownum from(")
.append(sql)
.append(") my_table ")
.append(") where my_rownum>=").append(startIndex);
}
return querySQL.toString();
}


  就可以了。

同时在数据库中,返回当前页需要显示的数据,主要有以下方法:
a.使用mysql控制:

  select * from user
  order by Host
  limit m, n


  结果返回的是第m+1行到第n行的数据集。比如:

  select * from user
  order by Host
  limit 1, 5


  返回的是第2行到第5行的数据集

b.使用sqlserver

  SELECT *
  FROM (SELECT TOP m *
  FROM (SELECT TOP n *
  FROM Customers) A
  ORDER BY CustomerID DESC) B
  ORDER BY CustomerID


  获得的结果集数据为第n-m+1行到第n行。

  对整个过程的解释:
  首先按照升序得到前n行的结果集A,然后按照降序从A中得到后m行的结果集B,最后按照升序对B进行重新排序,返回结果集。其中CustomerID为主键,比如:

  SELECT *
  FROM (SELECT TOP 5 *
  FROM (SELECT TOP 10 *
  FROM Customers) A
  ORDER BY CustomerID DESC) B
  ORDER BY CustomerID


  的意思就是返回包含第6行到第10行的数据结果集。

c.使用Oracle:

  select * from (select rownum r ,* from test) tt
  where tt.r > 50 and tt.r <= 100;


希望大家有好方法的话能说一下,大家共同进步。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品