LoginSignup
0
3

More than 5 years have passed since last update.

Realmを使ったデータベースの実装

Last updated at Posted at 2018-06-03

基本的なRealmの実装の方法についてまとめます。
今回は現在作成しているアプリのコードを使って説明していきます。

⒈事前準備

まず始めに、build.gradleファイルにclasspathを追加します。

uildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath "io.realm:realm-gradle-plugin:5.1.0"
    }
}

上記のコードの「classpath "io.realm:realm-gradle-plugin:5.1.0"」が追加した部分です。

⒉オブジェクトの定義

次にRealmObjectのサブクラスを作成し、オブジェクトを定義します。

public class Recipe extends RealmObject {

    @PrimaryKey
    int id;
    @Required
    private String name;
    @Required
    private String cookingTime;

プライマリキーを使うことで、オブジェクトの作成と更新は少し遅くなりますが、検索は速くなります。
複数のフィールドをプライマリキーとして指定することはできません。

定義した後は、getterとsetterを用意します。

public int getId() {
        return id;
    }

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

    public void setCookingTime(String cookingTime) {
        this.cookingTime = cookingTime;
    }

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


}

⒊モデルの定義

次にモデルを定義します。

新規作成と編集の更新は次のように行います。
プライマリキーを指定したモデルは、copyToRealmOrUpdate()を使ってオブジェクトを作成または更新をすることができます。

public class RecipeModel {

    private Realm mRealm = Realm.getDefaultInstance();

    /**
     * レシピの新規作成もしくは編集の更新
     *
     * @param recipeId     レシピのid
     * @param recipeName   レシピの名前
     * @param cookingTime  調理時間
     */
    public void copyOrUpdate(@Nullable Integer recipeId, String recipeName, String cookingTime) {
        if (recipeId == null) {
            recipeId = makeRecipeId();
        }
        Recipe recipe = new Recipe();
        recipe.setId(recipeId);
        recipe.setName(recipeName);
        recipe.setCookingTime(cookingTime);

        mRealm.beginTransaction();

        mRealm.copyToRealmOrUpdate(recipe);

        mRealm.commitTransaction();
    }

idがnullの場合に新規作成を行います。

削除は次のように行います。

    /**
     * レシピの削除
     *
     * @param recipeId  レシピのid
     */
    public void deleteRecipe(int recipeId) {
        mRealm.beginTransaction();

        // レシピの一覧から、recipeIdと一致するidのレシピの中で最初のものを取り出す
        Recipe recipe = mRealm.where(Recipe.class).equalTo("id", recipeId).findFirst();
        if (recipe != null) {
            recipe.deleteFromRealm();
        }

        mRealm.commitTransaction();
    }

まとめ

①build.gradleファイルにclasspathを追加
②オブジェクトの定義
③モデルの定義

この3つのステップでRealmでは簡単にデータベースを実装できます。
是非試してみてください。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3