在Android加入和使用Realm

來源:互聯網
上載者:User

標籤:realm   sqlite   資料庫   

原文連結:Up and Running With Realm for Android

介紹

如果你比較關心android開發的最新動向的話,那麼你肯定會聽說過Realm,Realm是一個輕量級的資料庫,在Android開發中,它可以替代SQLiteORM架構。

和SQLite相比,Realm速度更快並且它有很多先進的特性,例如對JSON的支援,流暢的API,資料變化通知(觀察者),加密支援… 所有的這一切都會讓android開發人員日子過得更瀟洒(這裡扯淡了,開發人員日子怎麼可能瀟洒,當然也可能是國內外不同…)。

這篇文章的主題就是Realm for Android, 在這篇文章中,我將使用Realm v0.84.1

將Realm添加到項目

要在Android項目中使用Realm, 你需要在module的build.gradle檔案中添加如下代碼:

compile ‘io.realm:realm-android:0.84.1‘
建立一個Realm

一個Realm和SQLite比較類似。它有一個檔案和他作為關聯,這個檔案一次建立,就會永久存在Android系統中。

想要建立一個Realm, 你可以在任意一個Activity中調用靜態方法Realm.getInstance

Realm myRealm = Realm.getInstance(context);

需要注意的是,我們這樣建立,沒有給它指定RealmConfiguration,這時候建立的檔案會使用預設的檔案名稱default.realm
如果你需要建立另外一個Realm,那你就必須要給它傳遞RealmConfiguration.Builder了,並且要給它指定一個唯一的名稱。

Realm myOtherRealm =        Realm.getInstance(                new RealmConfiguration.Builder(context)                        .name("myOtherRealm.realm")                        .build());
建立RealmObject

如果一個javabean繼承了RealmObject,那麼它就可以用來儲存Realm,如果你想知道什麼是javabean,來看看這裡的定義:javabean是可序列化的,有一個預設的構造方法,成員變數都提供getter和setter方法。例如,下面的代碼可以輕鬆的儲存到Realm中,

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;    }}

可以使用@PrimaryKey註解來表示這個一個成員變數是Realm的主鍵。例如下面的代碼是將code欄位作為主鍵,

@PrimaryKeyprivate String code;public String getCode() {    return code;}public void setCode(String code) {    this.code = code;}
建立事務

你將會在下面的代碼中發現,使用Realm查詢資料非常簡單, 寫入資料稍稍麻煩點。Realm遵循ACID以保證操作的原子性和一致性。在Realm中,所有的寫操作都會在一個事務中。

使用beginTransaction方法可以開啟一個事務,使用commitTransaction方法去提交一個事務。下面的代碼錶明如何建立並儲存一個Country

myRealm.beginTransaction();// Create an objectCountry country1 = myRealm.createObject(Country.class); // Set its fieldscountry1.setName("Norway");country1.setPopulation(5165800);country1.setCode("NO");myRealm.commitTransaction();

你可能已經注意到了,country1對象並不是使用Country的構造方法建立的,想讓RealmObject儲存這個執行個體, 就必須使用createObject方法建立。

如果你必須要使用構造方法的話,別忘了在提交事務之前調用copyToRealm方法將對象關聯到Realm上,例如:

// Create the objectCountry country2 = new Country();country2.setName("Russia");country2.setPopulation(146430430);country2.setCode("RU");myRealm.beginTransaction();    Country copyOfCountry2 = myRealm.copyToRealm(country2);myRealm.commitTransaction();
查詢

Realm提供了一套非常直觀簡單的API用來查詢操作,調用Realmwhere方法,並且將你需要的類的class傳遞進去, 你就完成了一個查詢的建立,之後, 你可以調用findAll方法來遍曆所有的資料,返回的資料儲存在RealmResults對象中,下面的例子,我們查詢出來並且列印了所有的Country

RealmResults<Country> results1 =        myRealm.where(Country.class).findAll();for(Country c:results1) {    Log.d("results1", c.getName());}// Prints Norway, RussiaRealmResults<Country> results1 =        myRealm.where(Country.class).findAll();for(Country c:results1) {    Log.d("results1", c.getName());}// Prints Norway, Russia

除此之外, 你還可以使用beginsWithendsWithlesserThangreaterThan方法來過濾結果,下面的例如展示了如何使用greaterThan方法來查詢所有的population大於1億的Country

RealmResults<Country> results2 =        myRealm.where(Country.class)                .greaterThan("population", 100000000)                .findAll();// Gets only Russia

如果你想讓查詢結果按照某個順序來,你可以使用findAllSorted方法,它有一個String類型的參數和一個boolean類型的參數,其中,String指定用來排序的欄位,boolean指定了排序方式,

// Sort by name, 降序排列RealmResults<Country> results3 =        myRealm.where(Country.class)                .findAllSorted("name", false);// Gets Russia, Norway

想要學習更多關於Realm的知識,可以參考官方文檔

在Android加入和使用Realm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.