Android數(shù)據(jù)庫---Realm

簡介

Realm 大部分代碼都是開源的届氢,但是其強(qiáng)大功能取決于隱藏在平臺內(nèi)部的一個(gè)核心數(shù)據(jù)庫引擎缠借,這個(gè)引擎完全由 C++ 編寫而成究履。

Realm 本質(zhì)上是一個(gè)嵌入式數(shù)據(jù)庫川慌,但是它也是看待數(shù)據(jù)的另一種方式亡笑。它用另一種角度來重新看待你移動應(yīng)用中的模型和業(yè)務(wù)邏輯侣夷。

Realm 最核心的理念就是對象驅(qū)動,這是 Realm 的核心原則仑乌。

簡單來說百拓,Realm有自己獨(dú)立的引擎,跟Sqlite完全不同晰甚。
Realm主要是用與數(shù)據(jù)庫關(guān)聯(lián)對象的實(shí)例來操作衙传,并且增刪改都要在事務(wù)中進(jìn)行。
例如在項(xiàng)目中有個(gè)User數(shù)據(jù)類厕九,繼承RealmObject:

User user = new User();
realm.beginTransation();
realm.copyToRealm(user);
// 對user對象的操作就是修改數(shù)據(jù)庫中對應(yīng)的數(shù)據(jù)
realm.commitTransation();

Realm不支持主鍵自動增長


image.png

image.png

查看官方文檔蓖捶,建議創(chuàng)建對象實(shí)例,設(shè)置主鍵扁远,再copyToRealm關(guān)聯(lián)對象俊鱼。

懶加載


image.png

官方建議是寫操作不在UI線程執(zhí)行,否則有阻塞的可能畅买。


image.png

在刪除數(shù)據(jù)庫記錄時(shí)并闲,數(shù)據(jù)庫文件可能不會及時(shí)被清理,可以調(diào)用compactRealm釋放可以釋放的磁盤空間


image.png

使用(官方說明文檔)

創(chuàng)建Model

繼承RealmObject來聲明Realm數(shù)據(jù)模型

public class Shop extends RealmObject {
    @PrimaryKey
    private Long id;
    //商品名稱
    private String name;

    // get/set方法
}

除了繼承RealmObject外皮获,還可以實(shí)現(xiàn)RealmModel焙蚓。使用實(shí)現(xiàn)RealmModel方式可以用RealmObject中的靜態(tài)方法來操作數(shù)據(jù)。

@RealmClass 
public class User implements RealmModel {
    .......
}

事務(wù)

realm所有修改操作要開啟事務(wù)(即查詢無需開啟事務(wù))洒宝,開啟事務(wù)有兩種方式
第一種是直接開啟事務(wù)购公,第二種是使用事務(wù)回調(diào)方法

// 第一種 直接開啟事務(wù)
realm.beginTransaction();
/* 數(shù)據(jù)庫操作 */
realm.commitTransaction();

// 第二種 使用事務(wù)回調(diào)方法
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        /* 數(shù)據(jù)庫操作 */
    }
});
// 第二種還可以使用異步回調(diào)方法
realm.executeTransactionAsync(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        /* 數(shù)據(jù)庫操作 */
    }
}, new Realm.Transaction.OnSuccess() {
    @Override
    public void onSuccess() {
        /* 數(shù)據(jù)庫操作成功回調(diào) */
    }
}, new Realm.Transaction.OnError() {
    @Override
    public void onError(Throwable error) {
        /* 數(shù)據(jù)庫操作失敗回調(diào) */
    }
});

添加

realm添加有兩種
第一種是用realm.createObject()創(chuàng)建關(guān)聯(lián)實(shí)例對象
第二種是先創(chuàng)建對象,再用realm.copyToRealm()來關(guān)聯(lián)實(shí)例對象

public void save() {
    realm.beginTransaction();

    // 第一種
    Shop shop1 = realm.createObject(Shop.class);
    // 第二種
    Shop shop2 = new Shop();
    realm.copyToRealm(shop2);

    realm.commitTransaction();
}

刪除

public void delete() {
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            RealmResults<Shop> results = realm.where(Shop.class).findAll();

            Shop shop = results.get(1);
            if (shop != null) {
                shop.deleteFromRealm();
                //RealmObject.deleteFromRealm(shop);
            }
            results.deleteFromRealm(1);
        }
    });
}

查詢

public void find() {
    RealmResults<Shop> all = realm.where(Shop.class).findAll();
    Shop shop = realm.where(Shop.class).equalTo("id", "1000").findFirst();
}

更新

public void update() {
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            Shop shop = realm.where(Shop.class).equalTo("id", "1000").findFirst();
            shop.setName("www");
        }
    });
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雁歌,一起剝皮案震驚了整個(gè)濱河市宏浩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靠瞎,老刑警劉巖比庄,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件求妹,死亡現(xiàn)場離奇詭異,居然都是意外死亡佳窑,警方通過查閱死者的電腦和手機(jī)制恍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神凑,“玉大人净神,你說我怎么就攤上這事「任” “怎么了鹃唯?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓣喊。 經(jīng)常有香客問我坡慌,道長,這世上最難降的妖魔是什么藻三? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任洪橘,我火速辦了婚禮,結(jié)果婚禮上趴酣,老公的妹妹穿的比我還像新娘梨树。我一直安慰自己,他們只是感情好岖寞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柜蜈,像睡著了一般仗谆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淑履,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天隶垮,我揣著相機(jī)與錄音,去河邊找鬼秘噪。 笑死狸吞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的指煎。 我是一名探鬼主播蹋偏,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼至壤!你這毒婦竟也來了威始?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤像街,失蹤者是張志新(化名)和其女友劉穎黎棠,沒想到半個(gè)月后晋渺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脓斩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年木西,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片随静。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡户魏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挪挤,到底是詐尸還是另有隱情叼丑,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布扛门,位于F島的核電站鸠信,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏论寨。R本人自食惡果不足惜星立,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葬凳。 院中可真熱鬧绰垂,春花似錦、人聲如沸火焰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昌简。三九已至占业,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纯赎,已是汗流浹背谦疾。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留犬金,地道東北人念恍。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像晚顷,于是被迫代替她去往敵國和親峰伙。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容