[Xamarin] 軽量データベースRealmを使用する(2) ~データの読み書き~

前回に引き続き、今回はRealmによるデータの読み書きをみていきます。

使用したRealmのバージョンは2.1.0です。

モデルの準備

今回は、以下のモデルを準備して、データの読み書きを行うこととします。

public class Person : RealmObject
{
    public string Name { get; set; }
    public string Manager { get; set; }
}

Realmインスタンスの取得

Realmによるデータの読み書きをするには、以下のようにしてインスタンスを取得しておく必要があります。

var realm = Realm.GetInstance();

データの書き込み

インスタンスを取得したら、以下のようにしてWriteメソッドを使用してデータを追加します。

この例では2件のデータを追加しています。

var realm = Realm.GetInstance();

realm.Write(() =>
{
    realm.Add(new Person{ Name = "HIRO", Manager = "Bill" });
    realm.Add(new Person{ Name = "Jim", Manager = "Steve" });
});

データの読み取り

全データを取得したい場合は以下のようにします。

var p = realm.All<Person>();

条件を指定してデータを取得したい場合は、以下のようにWhereを使用します。

この場合はNameが「HIRO」のデータを取得します。

var p = realm.All<Person>().Where(d => d.Name == "HIRO");

データの件数を取得する

データ件数を取得したい場合はCount()メソッドを使用します。

全データ件数を取得したい場合は以下のようにします。

var count = realm.All<Person>().Count();

指定したデータの件数を取得したい場合は以下のようにします。

var count = realm.All<Person>().Where(d => d.Name == "HIRO").Count();

データの更新

データを更新するには、取得したデータのプロパティを書き換えます。データの書き込み同様にWriteメソッドを使用します。

例えばNameが「HIRO」のManagerを「Someone」に書き換えたい場合は、以下のようにします。

データを取得する際に.First()としているのは、先頭の1件に対して書き換えたいためです。

var p = realm.All<Person>().Where(d => d.Name == "HIRO").First();

realm.Write(() =>
{
    p.Manager = "Someone";
});

データの削除

データを削除するには、RealmインスタンスのRemoveメソッドを使用します。

以下はNameが「HIRO」のデータを削除します。

var realm = Realm.GetInstance();

var p = realm.All<Person>().Where(d => d.Name == "HIRO").First();

realm.Write(() =>
{
    realm.Remove(p);
});

データベースを削除する

モデルの内容が変更になったりして、最初からデータベースを作り直したい場合があります。このような場合は、以下のようにDeleteRealmメソッドを使用します。

var config = new RealmConfiguration();
Realm.DeleteRealm(config);