Realm(Java)数据库使用文档(查询Queries)


Realm(Java)数据库使用文档(目录)

All fetches (including queries) are lazy in Realm, and the data is never copied.
所有获取(包括查询)在Realm中都是惰性的,并且永远不会复制数据。

Realm的查询引擎使用 Fluent interface 构造多子句查询。

public class User extends RealmObject {

    @PrimaryKey
    private String          name;
    private int             age;

    @Ignore
    private int             sessionId;

    // Standard getters & setters generated by your IDE…
    public String getName() { return name; }
    public void   setName(String name) { this.name = name; }
    public int    getAge() { return age; }
    public void   setAge(int age) { this.age = age; }
    public int    getSessionId() { return sessionId; }
    public void   setSessionId(int sessionId) { this.sessionId = sessionId; }
}

要查找所有名为John或Peter的用户,请输入:

// Build the query looking at all users:
RealmQuery<User> query = realm.where(User.class);

// Add query conditions:
query.equalTo("name", "John");
query.or().equalTo("name", "Peter");

// Execute the query:
RealmResults<User> result1 = query.findAll();

// Or alternatively do the same all at once (the "Fluent interface"):
RealmResults<User> result2 = realm.where(User.class)
                                  .equalTo("name", "John")
                                  .or()
                                  .equalTo("name", "Peter")
                                  .findAll();

这为您提供了RealmResults类的新实例,其中包含名称为John或Peter的用户。

方法findAll执行查询; [RealmQuery] []包含一整套findAll方法:

  • findAll查找满足查询条件的所有对象
  • findAllAsync在后台线程上异步运行
  • findFirst(和findFirstAsync)查找符合查询条件的第一个对象

有关完整的详细信息,请深入研究RealmQuery API参考。

查询返回对匹配对象的引用列表,因此您可以直接使用与查询匹配的原始对象。RealmResults从AbstractList继承,并且行为类似。例如,RealmResults是有序的,您可以通过索引访问单个对象。如果查询不匹配,则返回的RealmResults对象将是size(0)的列表(不为null)。

如果要修改或删除RealmResults集中的对象,则必须在写事务中进行。

请注意,您还可以查询关系:阅读有关链接查询的信息。

8.1 筛选

where方法通过指定model来启动RealmQuery。过滤条件是由谓词方法指定的,大多数谓词方法都具有不言自明的名称(例如equalTo)。谓词始终将字段名称作为其第一个参数。

并非所有谓词都可用于所有字段类型。有关详细信息,请查阅[RealmQuery] [] API参考。

对于所有数据类型,您具有以下谓词:

  • equalTo
  • notEqualTo
  • in

要将字段与值列表匹配,请使用in。例如,要查找名称“Jill”\“ William”或“ Trillian”,可以使用in(“name”,new String [] {“ Jill” ,“ William”,“ Trillian”})。 in谓词适用于字符串,二进制数据和数字字段(包括日期)。

包括日期在内的数值数据类型允许以下附加谓词:

  • between(包括both和points等,是一个有界区间)
  • greaterThan
  • lessThan
  • greaterThanOrEqualTo
  • lessThanOrEqualTo

字符串字段允许这些其他谓词:

  • contains
  • beginsWith
  • endsWith
  • like

所有四个字符串谓词都有一个可选的第三个参数来控制区分大小写:Case.INSENSITIVE和Case.SENSITIVE。默认值为Case.SENSITIVE。

谓词like执行glob样式的通配符匹配。匹配模式由字符和一个或多个通配符组成:

  • *
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值