・nameフィールドの値が"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();


・findAllSorted() ソートされた結果を返す。

 findAllAsync() 非同期実行する。


・該当データがない場合は、size()=0 となる。


・where()

 ・すべてのデータ型に使える

  equalTo()

  notEqualTo()

  in()


 ・数値型およびDate型に使える

  between()

  greaterThan()

  lessThan()

  greaterThanOrEqualTo()

  lessThanOrEqualTo()


 ・String型に使える

  contains()

  beginsWith()

  endsWith()

  like()


  3番目の引数

   Case.INSENSITIVE 大文字小文字の区別を蒸し

   Case.SENSITIVE 大文字小文字を区別 (デフォルト)


  like()のワイルドカード

   * 0個または複数のユニコード文字列にマッチ

   ? 1つのユニコード文字にマッチ


 ・バイナリデータと文字列の空の値

  isEmpty()

  isNotEmpty()


 ・nullにマッチ

  isNull()

  isNotNull()


・論理演算

 ・全ての条件式は暗黙的に論理積(AND)になる。

  論理和(OR)を使う場合は明示的に or() を使用する。

 ・評価準を指定するために beginGroup() と endGroup() を用いて

  条件をグループ化できる。


 RealmResults<User> r = realm.where(User.class)

               .greaterThan("age", 10) // implicit AND

               .beginGroup()

              .equalTo("name", "Peter")

              .or()

              .contains("name", "Jo")

              .endGroup()

              .findAll();

 ・not()は beginGroup()とendGroup()のみに使える。

  RealmResults<User> r = realm.where(User.class)

                .not()

                .beginGroup()

                .equalTo("name", "Peter")

                .or()

                .contains("name", "Jo")

                .endGroup()

                .findAll();


 ・in()

  RealmResults<User> r = realm.where(User.class)

                .not()

                .in("name", new String[]{"Peter", "Jo"})

                .findAll();


・並べ替え

 RealmResults<User> result = realm.where(User.class).findAll();

 result = result.sort("age"); // 昇順にソート

 result = result.sort("age", Sort.DESCENDING);// 降順にソート


・distinct()

 RealmResults<Person> unique = realm.where(Person.class).distinct("name");


・集計

RealmResults<User> results = realm.where(User.class).findAll();

long sum = results.sum("age").longValue();

long min = results.min("age").longValue();

long max = results.max("age").longValue();

double average = results.average("age");

long matches = results.size();


・繰り返し処理とスナップショット

Realmコレクションは値が設定されると即座に反映されるので

要素を順番に変更するにはスナップショットを取得する。

RealmResults<Person> guests = realm.where(Person.class).equalTo("invited", false).findAll();

// Use a snapshot to invite all guests

realm.beginTransaction();

OrderedRealmCollectionSnapshot<Person> guestsSnapshot = guests.createSnapshot();

for (int i = 0; guestsSnapshot.size(); i++) {

 guestsSnapshot.get(i).setInvited(true);

}

realm.commitTransaction();


・削除

// クエリを発行し結果を取得

final RealmResults<Dog> results = realm.where(Dog.class).findAll();

// 変更操作はトランザクションの中で実行する必要あり

realm.executeTransaction(new Realm.Transaction() {

 @Override

 public void execute(Realm realm) {

  // マッチしたオブジェクトから1つを削除

  results.deleteFromRealm(0);

  results.deleteLastFromRealm();

  // 特定のオブジェクトのみを削除

  Dog dog = results.get(5);

  dog.deleteFromRealm();

  // すべてのオブジェクトを削除

  results.deleteFromRealm();

 }

});


・非同期クエリ

RealmResultsが更新される際に通知を受け取る場合は、

RealmChangeListenerを登録する。

このリスナはRealmResultsが更新されるたびに呼び出される。


private OrderedRealmCollectionChangeListener<RealmResults<User> callback = new OrderedRealmCollectionChangeListener<>() {

 @Override

 public void onChange(RealmResults<User> results, OrderedCollectionChangeSet changeSet) {

  if (changeSet == null) {

   // The first time async returns with an null changeSet.

  } else {

   // Called on every update.

  }

 }

};


public void onStart() {

 RealmResults<User> result = realm.where(User.class).findAllAsync();

 result.addChangeListener(callback);

}


public void onStop () {

 result.removeChangeListener(callback); // 特定のリスナの登録を解除

 // または

 result.removeAllChangeListeners(); // 登録されている全てのリスナの登録を解除

}


・クエリの完了チェック

RealmResults<User> result = realm.where(User.class).findAllAsync();

 if (result.isLoaded()) {

 // クエリの結果を利用した処理

}


via System Development Tips
Your own website,
Ameba Ownd