【问题标题】:Android Realm find first N elementAndroid Realm 找到第一个 N 元素
【发布时间】:2016-03-24 10:54:12
【问题描述】:

如何从 Realm 数据库中选择第一个 N 元素。 现在,我使用这段代码来选择 N 个元素:

Realm.getDefaultInstance()
.where(MyObject.class)
.findAllSorted("myField", Sort.DESCENDING)

但是这个选择操作太长了。我需要对 SQL 'LIMIT' 操作进行模拟。

【问题讨论】:

标签: android database sqlite realm


【解决方案1】:

你可以看看这个 https://github.com/realm/realm-java/issues/544

似乎领域结果是延迟加载的,因此您在使用领域时不需要“限制”

【讨论】:

    【解决方案2】:

    简单

    int N=10;   // whatever value you want
    Realm mRealm=Realm.getDefaultInstance();
    
    RealmResults<Example> list= mRealm.where(Example.class).findAll();
    list.subList(0,N);
    

    【讨论】:

    • list.sublist 将返回 List 集合,它不能作为 RealmResult 工作。
    • yes List 将被返回 ....如果你想要 ReamResults 那么抱歉,Android 中没有直接的解决方案
    【解决方案3】:

    我是用limit方法做到的, 你应该使用最新版本 classpath "io.realm:realm-gradle-plugin:5.8.0"

    RealmResults<YourPOJOClass> realmResults = mRealm.where(YourPOJOClass.class).sort("createdTime").limit(10).findAll();
    //here this record will be sorted by ascending order using schema name "createdTime" 
    //this will return the 10 rows only.
    

    `

    【讨论】:

      【解决方案4】:

      可能重复因为我已经在这里发布了解决方案:Limit Realm results

      在使用官方文档https://realm.io/docs/java/latest中的“between”查询这么多天后,我找到了实现此目的的解决方案@

      如果要获取前 N 个元素,只需将计数从和到传递,字段名称如下

      realm.where(clazz).between("count",0,1000).findAll();
      

      在哪里,

      "count" = 字段名(即你的 pojo 中的变量名)
      "0" = Range From
      "1000" = 到

      的范围

      例如:上面的查询将获取第一个 0 到 1000 作为 RealmResults。

      注意:上述解决方案仅在您有一些具有行数的唯一 ID 时才有效。就我而言,我在将值插入 Realm 之前手动插入了计数值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 2012-06-02
        • 2019-10-27
        • 2016-02-01
        • 1970-01-01
        • 2010-09-20
        • 2012-07-09
        相关资源
        最近更新 更多