« | October 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。 |
Blog信息 |
blog名称: 日志总数:210 评论数量:205 留言数量:-19 访问次数:923079 建立时间:2007年5月10日 |

| |
[开源面向对象数据库db4o之旅]如何在db4o进行分页? 文章收藏, 网上资源, 软件技术, 电脑与网络
李小白 发表于 2008/4/7 15:31:16 |
可以用Evaluation 来实现, 例如:
query.constraints(new FilterEvaluation(pageSize))
public class FilterEvaluation implements Evaluation
{
private static final long serialVersionUID = 1L;
private int size = -1 ;
private int index ;
public FilterEvaluation(int size)
{
this.size = maxSize;
index = 0 ;
}
public void evaluate(Candidate candidate)
{
if(index < maxSize)
{
candidate.include(true);
index ++;
}else
{
candidate.include(false);
}
}
关于查询结果的排序:可以使用方法ObjectContainer.query(Predicate, Comparator)为你的对象构造一个或多个java.util.Comparator这样查询结果将会根据你指定的比较算法,进行排序。
想象一个 .net 的查询写法:
IEnumerable<Person> myQuery(int a,int b) { IQuery q=db.Query(); q.Constrain(typeof(Person)); q.Descend("姓名").OrderAscending(); IObjectSet result=q.Execute(); int p=0; while(result.HasNext() && p<b) { if(p<a) result.Next(); else yield return result.Next(); p++; } yield break; }
查询例如:
foreach(Person obj in myQuery(10,20)) Console.Write(obj.ToString());
我使用6.0和6.1测试,在建立了索引并且查询表达方式注意了应该可以使用到索引的情况下,我使用上万业务数据查询,发现NQ查询的性能即使对单个字段搜索一个固定值的查询也根本无法使用。一定要使用SODA查询。 |
|
» 1 »
|