【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で検索したレコードを削除します。 |
コメント
コメントを投稿