安卓日記——Realm快速上手

Realm作為一種新興的數(shù)據(jù)庫以其變態(tài)的速度吸引了我們,擺圖看看它有多快


這里寫圖片描述

力壓主流Sqlite,所以學(xué)習(xí)Realm就很有必要了

1.在項(xiàng)目的build.gradle=>buildscript=>dependencies添加

classpath "io.realm:realm-gradle-plugin:1.0.1"

添加后效果如下


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath "io.realm:realm-gradle-plugin:1.0.1"
    }
}

2.在moudle的build.gradule里頭部添加

apply plugin: 'realm-android'

3.開始使用Realm

RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).build();
        Realm.setDefaultConfiguration(realmConfig);
realm=Realm.getDefaultInstance();

最好把realm設(shè)為Realm類型的全局變量因?yàn)樽詈笠阉P(guān)閉掉
我這里只介紹最簡(jiǎn)單的方法,至于配置表名,表的版本這里不詳細(xì)介紹

4.聲明開始事務(wù)

        realm.beginTransaction();
        //TODO
        realm.commitTransaction();

開始前要beginTransaction,結(jié)束后要commitTransaction
不過還有另外兩種方式

第一種同步執(zhí)行

realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    //TODO         
                }
            });

第二種異步執(zhí)行

                realmAsyncTask=realm.executeTransactionAsync(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                //TODO
                }

            });

為什么要返回一個(gè) RealmAsyncTask的值呢,因?yàn)槿绻阍谔D(zhuǎn)Activity之后想中止這個(gè)過程則要把realmAsyncTask 關(guān)掉,就像網(wǎng)絡(luò)請(qǐng)求一樣。

5.新建實(shí)體

public class Country extends RealmObject {
    private String name;
    private int population;

    public Country() { }

    public String getName() {
        return name;
    }

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

    public int getPopulation() {
        return population;
    }

    public void setPopulation(int population) {
        this.population = population;
    }
}

實(shí)體必須是繼承自RealmObject

6.增加

        realm.beginTransaction();
        Country country=realm.createObject(Country.class);
        country.setPopulation(1000000);
        country.setName("China");
        realm.commitTransaction();

7.查詢

RealmResults<Country>realmResults =realm.where(Country.class).findAll();

支持以下幾種條件查詢

  • between()、greaterThan()、lessThan()、greaterThanOrEqualTo() 和
    lessThanOrEqualTo()
  • equalTo() 和 notEqualTo()
  • contains()、beginsWith() 和 endsWith()
  • isNull() 和 isNotNull()
  • isEmpty() 和 isNotEmpty()
  • or()和and()
  • not()

若想結(jié)果排序,可將findall換成findAllSorted

        //結(jié)果對(duì)poppulation升序排序
        RealmResults<Country> results3 =
                realm.where(Country.class)
                        .findAllSorted("population", Sort.ASCENDING);

如果是降序則要把Sort.ASCENDING換成Sort.DESCENDING**

8.刪除

無論是刪除和修改都是基于查詢語句的

        realm.beginTransaction();
        //刪除查詢到的所有項(xiàng)
        results3.deleteAllFromRealm();
        //刪除查詢到的location為2的項(xiàng)
        results3.deleteFromRealm(2);
        //刪除查詢到的第一項(xiàng)
        results3.deleteFirstFromRealm();
        //刪除查詢到的最后一項(xiàng)
        results3.deleteLastFromRealm();
        realm.commitTransaction();

9.修改

        realm.beginTransaction();
        //將loacation為0的項(xiàng)的population改為13000000
        Country mCountry=results3.get(0);
        mCountry.setPopulation(13000000);
        realm.commitTransaction();

總結(jié)

Realm雖然速度快,但他的擴(kuò)展性不及其實(shí)sqlite的庫,導(dǎo)致有些人不喜歡用,這世界上并沒有完美的東西,至于你們?cè)趺催x擇就看你們自己的取舍吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容