【Android】Realmの基礎 - 検索・追加・更新・削除 -

Androidアプリケーションで、Realmを使ったデータの取り扱いについてまとめました。

Realmとは

モバイルデバイス向けのデータベースです。Realmが登場するまではSQLiteなどが一般的でした。

もっと詳しくという人は、こちらの記事が分かりやすいと思います。

https://mynavi-agent.jp/it/geekroid/2015/03/realm-realm-tech-talk-.html

実装

ライブラリを追加

app/build.gradle

dependenciesに以下の2行を追加して同期します。

implementation 'io.realm:realm-android:+'
annotationProcessor 'io.realm:realm-android:+'

データ型の定義について

データ型はRealmObjectを継承したクラスによって定義します。

これはデータベースで言うところのテーブルに当たります。

ここではIDと名前の2項目を持った単純なテーブルを作ります。

import io.realm.RealmObject;

public class Item extends RealmObject{
    private int id;
    private String name;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Realmインスタンスを取得

インスタンスの取得は以下で行います。

以降このインスタンスを使って検索・追加・更新・削除を行います。

Realm realm = Realm.getInstance(this);

データの検索

// 登録データ全件を取得する
RealmResults<Item> items = realm.where(Item.class).findAll();
for (Item i : items) {
    addText(i.getId() + ":" + i.getName());
}

データの追加・更新

Realmデータベースに変更をかける処理はrealm.executeTransactionの中でexecuteをオーバーライドして行います。

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        int id = 1;
        String name = "Test Name";

        RealmResults<Item> finds = realm.where(Item.class).equalTo("id", id).findAll();

        if(finds.size() > 0) {
            // 更新
            finds.get(0).setName(name);
        } else{
            // 追加
            Item item = realm.createObject(Item.class);
            item.setId(id);
            item.setName(name);
            realm.copyFromRealm(item);
        }
    }
});

データの削除

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        int id = 1;

        RealmResults<Item> finds = realm.where(Item.class).equalTo("id", id).findAll();

        if(finds.size() > 0) {
            // 削除
            finds.get(0).removeFromRealm();
        }
    }
});

サンプル

今回記載した基本的な部分を確認できるソースコードをいかにアップしておきました。

https://github.com/s-watanabe-apps/realm-test/tree/develop/20181102

これを実行すると以下のように、検索・追加・更新・削除が行えます。


実行すると空っぽの状態から始まります。

SYNCボタンでIDをキーにレコードをインサート・アップデートします。

RMボタンでIDで検索したレコードを削除します。

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)