1. 程式人生 > >Realm For Android入門教程

Realm For Android入門教程

Realm For Android入門教程

各位看客老爺們,很久沒更新文章了;最近專案中的資料庫那裡寫的我的確有點噁心了,所以開始看看各種資料庫框架,我查了下網上對各種資料庫框架的對比分析哈;但是我一眼就看上了你(realm) 可以跨平臺,可以輕鬆的使用json資料,這簡直對我來說是神器啊,我都懶得處理資料了,暫時先寫個demo,入門吧,來考驗下這個,我看網上說了有很多坑,我先踩踩坑~

1、Realm簡介

資料庫Realm,是用來替代sqlite的一種解決方案,它有一套自己的資料庫儲存引擎,比sqlite更輕量級,擁有更快的速度,並且具有很多現代資料庫的特性,比如支援JSON,流式api,資料變更通知,自動資料同步,簡單身份驗證,訪問控制,事件處理,最重要的是跨平臺,目前已有Java,Objective C,Swift,React-Native,Xamarin這五種實現。

2、環境配置

在Progect build中新增:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:2.0.2"
    }
}

在app build中頭新增

apply plugin: 'realm-android'

3、在Application中初始化Realm

在Application中初始化,別忘記在AndroidManifest.xml檔案中的application宣告

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);
        RealmConfiguration config = new  RealmConfiguration.Builder()
                .name("myRealm")       //資料庫名字
                .schemaVersion(0)      //資料庫版本號
.build(); //建立 Realm.setDefaultConfiguration(config); } }

RealmConfiguration支援的方法:

  1. Builder.name : 指定資料庫的名稱。如不指定預設名為default。
  2. Builder.schemaVersion : 指定資料庫的版本號。
  3. Builder.encryptionKey : 指定資料庫的金鑰。
  4. Builder.migration : 指定遷移操作的遷移類。
  5. Builder.deleteRealmIfMigrationNeeded : 宣告版本衝突時自動刪除原資料庫。
  6. Builder.inMemory : 宣告資料庫只在記憶體中持久化。
  7. build : 完成配置構建。

4、建立實體

1.現在開始建立第一個demo的例項吧
程式碼奉上

public class Dog extends RealmObject {
    private String name;
    private int age;

    @PrimaryKey
    private int id;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

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

並沒有很多東西,頂多是多了個標籤(@PrimaryKey)
這就是個普通的javabean啊;相關的其他標籤我寫在下面啦

1、支援的資料型別:
boolean, byte, short, int, long, float, double, String, Date and byte[]
在Realm中byte, short, int, long最終都被對映成long型別

2、註解說明

@PrimaryKey

①欄位必須是String、 integer、byte、short、 int、long 以及它們的封裝類Byte, Short, Integer, and Long

②使用了該註解之後可以使用copyToRealmOrUpdate()方法,通過主鍵查詢它的物件,如果查詢到了,則更新它,否則新建一個物件來代替。

③使用了該註解將預設設定(@index)註解

④使用了該註解之後,建立和更新資料將會慢一點,查詢資料會快一點。

@Required

資料不能為null

@Ignore

忽略,即該欄位不被儲存到本地

@Index

為這個欄位新增一個搜尋引擎,這將使插入資料變慢、資料增大,但是查詢會變快。建議在需要優化讀取效能的情況下使用。

5、增刪改查

建立完畢後,我就建立了一個工具類;將資料庫的操作都寫入裡面;
先為各位看客老爺風險上程式碼:

public class DatabasesManager {
    /**
     * 增加資料
     */
    public static void Add() {
        for (int i = 2; i < 10; i++) {
            Realm realm = Realm.getDefaultInstance();
            realm.beginTransaction();
            Dog dog = realm.createObject(Dog.class, i);
            dog.setAge(23 + i);
            dog.setName("U" + i);
            realm.commitTransaction();
        }
    }

    /**
     * 刪除
     */
    public static void Delete() {
        Realm realm = Realm.getDefaultInstance();
        realm.beginTransaction();
        Dog dog = realm.where(Dog.class).equalTo("id", 1).findFirst();
        dog.deleteFromRealm();
        realm.commitTransaction();
    }


    /**
     * 修改
     */
    public static void Update() {
        Realm realm = Realm.getDefaultInstance();
        Dog dog = realm.where(Dog.class).equalTo("id", 0).findFirst();
        realm.beginTransaction();
        dog.setName("網二");
        realm.commitTransaction();
    }

    /**
     * 查詢
     *
     * @return
     */
    public static List<Dog> Quarry() {
        Realm realm = Realm.getDefaultInstance();
        return realm.where(Dog.class).findAll();
    }
}

如上的程式碼並不是很難的操作;
看到這裡是不是感覺很簡單呢?

詳細講解下

a. 增
新建一個物件,並進行儲存:使用的是Transaction的方式


    Realm realm = Realm.getDefaultInstance();
    realm.beginTransaction();
    Dog dog = realm.createObject(Dog.class, i);
    dog.setAge(23 + i);
    dog.setName("U" + i);
    realm.commitTransaction();

b. 刪

    Realm realm = Realm.getDefaultInstance();
    realm.beginTransaction();
    Dog dog = realm.where(Dog.class).equalTo("id", 1).findFirst();
    dog.deleteFromRealm();
    realm.commitTransaction();

我覺得最主要說的應該是equalTo(String fieldName, Integer value) 這裡面的引數;
fieldName:這個是資料庫的欄位名稱——也就是javabean的名字哦
value:你的條件值啊;這個語句就類似於:

    delete from table where table.a = (select b where c.filename = value);

c.改

    Realm realm = Realm.getDefaultInstance();
    Dog dog = realm.where(Dog.class).equalTo("id", 0).findFirst();
    realm.beginTransaction();
    dog.setName("網二");
    realm.commitTransaction();

這個沒什麼好說的,跟上面跟上面刪除的操作類似;

d.查詢

    Realm realm = Realm.getDefaultInstance();
    realm.where(Dog.class).findAll();

哇咔咔,這個是不是太簡單了,相對比較我之前寫的查詢語句,簡直簡便了多了,2行程式碼,之前封裝完了也不止2行(ps:可能是作者我比較low)
擴充套件一點點:增加個調價查詢;哈哈
想必聰明的你看到這裡都知道了,一定是這樣的;

    Realm realm = Realm.getDefaultInstance();
    realm.where(Dog.class).equalTo("id", 0).findFirst();

那麼肯定又有人要問了,如果我需要其他條件怎麼辦啊?小主早就為你準備好了,往下看

常見的條件如下(詳細資料請查官方文件):

between(), greaterThan(), lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()

equalTo() & notEqualTo()

contains(), beginsWith() & endsWith()

isNull() & isNotNull()

isEmpty() & isNotEmpty()

好啦,Realm簡單的入門瞭解就簡單介紹在這裡吧,還有一些非同步處理本期沒有寫出來,等我更新哦~

專案下載

更多文章

如果你覺得還湊合,還能看的話,那麼麻煩你動動你的小手分享出去哦