2009-09-11 99 views
0

我想显示我的网站中所有用户的列表,但我只想每个年龄显示10个人。我不知道如何做到这一点。我知道如何通过在一个页面中显示所有用户来做到这一点,但这不是很好吗?以增量显示来自数据库的查询结果

如果我用现在的代码来做,它只会得到前10名用户。 我希望能够让所有用户进行一次查询,将其存储到全局,然后在列表中移动,然后检索下一个10,以此类推以显示。

我在会议上制定关于使用Java和Spring框架的一些我一直在思考解决方案的AppEngine上,

  1. 存储和浏览清单(非常糟糕,我猜)
  2. 手它到JSP,特别是一个范围,页面,请求等。但我认为请求不起作用。
  3. 寻找一个可以处理这个问题的Spring控制器。
+0

您正在使用哪种数据库产品? – adatapost 2009-09-11 03:47:01

+0

我正在使用AppEngine的数据存储。这是一个JDO数据库。 – Jeune 2009-09-11 15:32:00

回答

1

一般来说,你会在页面上使用一个表单变量(通过GET或POST),称为'页面',这将是一个数字。当您在servlet中接收到该数据时,您将根据页码和每页配置的行计算一个范围。

请参阅Paging through large datasets(是的,它是Python,但适用相同的原则)以及Google App Engine文档中的Queries and Indexes

0

SELECT TOP 10 users FROM myusers 
WHERE AGE = function(page_number) 
ORDER BY some_ordering 

我希望JPA + appengine支持这种类型的查询。

0

某些数据库引擎为此提供了SQL的方便扩展。就像在MySQL中,你可以说“select ... whatever ... limit 50,10”,其中“50”是开始的行,10是要检索的行数。然后在显示页面上,您只需放置下一个和上一个按钮,将相应的起始行号传回服务器,以便在查询中进行下一次运行。

如果您使用的SQL引擎没有这种方便的功能,那么您必须根据排序顺序构建一个特定于查询的“where”子句。

要举一个简单的例子,假设在您的示例中您按照“user_name”的顺序显示记录。您可以使用Statement.setMaxRows(10)将任何查询限制为10行。然后在您执行的第一个调用中,例如说,“选择...任何...来自user_name的用户顺序”。保存找到的最后一个user_name。在你的下一个按钮中,你将这个user_name传递回服务器,并且下一个调用的查询是“select ... whatever ... from user where user_name>'xxx'order by user_name”,其中'xxx'是上次调用的最后一个用户名。再次执行setMaxRows,以便再次限制为10行输出。然后你可以让用户以这种方式遍历整个输出。

让用户倒退是有点痛苦。我已经通过在每个页面的开始键值中保留一个会话变量表来完成它。