Realm數據庫操作

realm官網: https://realm.io/cn/docs/objc/latest/
1.將Realm庫pod到工程中

pod 'Realm'

2.建立數據模型

#import <Realm/Realm.h>

@interface Student : RLMObject

@property NSString *name;
@property NSInteger age;
/**
 獲取數據模型
 */
+(Student *)StudentWithName:(NSString *)name;

/**
 刪除數據
 */
+(void)deleteStudentWithName:(NSString *)name;

/**
 更新數據
 */
- (void)updateAge:(NSInteger)age;

@end
#import "Student.h"

@implementation Student

/**
 設置主鍵
 */
+(NSString *)primaryKey{
    //主鍵
    return @"name";
}

/**
 獲取數據模型
 */
+(Student *)StudentWithName:(NSString *)name
{
    RLMRealm *realm = [RLMRealm defaultRealm];
    Student *student = [Student objectForPrimaryKey:name];
    if (student == nil) {
        student = [[Student alloc] init];
        student.name = name;
        [realm beginWriteTransaction];
        [realm addObject:student];
        [realm commitWriteTransaction];
    }
    return student;
}

/**
 更新數據
 */
- (void)updateAge:(NSInteger)age{
    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm beginWriteTransaction];
    self.age = age;
    [realm commitWriteTransaction];
}

/**
 刪除數據
 */
+ (void)deleteStudentWithName:(NSString *)name{
    RLMRealm *realm = [RLMRealm defaultRealm];
    Student *student = [Student objectForPrimaryKey:name];
    [realm beginWriteTransaction];
    [realm deleteObject:student];
    [realm commitWriteTransaction];
}
@end

3.增、刪、改、查 操作

/**
 獲取數據模型【增】
 */
+(Student *)StudentWithName:(NSString *)name
{
    RLMRealm *realm = [RLMRealm defaultRealm];
    Student *student = [Student objectForPrimaryKey:name];
    if (student == nil) {
        student = [[Student alloc] init];
        student.name = name;
        //增加模型
        [realm beginWriteTransaction];
        [realm addObject:student];
        [realm commitWriteTransaction];
    }
    return student;
}

/**
 刪除數據【刪】
 */
+ (void)deleteStudentWithName:(NSString *)name{
    RLMRealm *realm = [RLMRealm defaultRealm];
    Student *student = [Student objectForPrimaryKey:name];
    [realm beginWriteTransaction];
    //刪除模型
    [realm deleteObject:student];
    [realm commitWriteTransaction];
}

/**
 更新數據【改】
 */
- (void)updateAge:(NSInteger)age{
    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm beginWriteTransaction];
    //更改數據
    self.age = age;
    [realm commitWriteTransaction];
}

/**
 查詢數據【查】
 */
_allStudent = [Student allObjects];

4.數據庫升級
所謂數據庫升級,比如,rev1.0版本發布了,其數據中原始數據模型為只有 name 和 age 兩個屬性。rev2.0需要給模型添加 score 和 class 兩個屬性,這時候,如果直接給模型添加屬性,不做數據庫升級操作,則需要將APP卸載,重新安裝才能使用,不然就是直接crash。
添加一個數據模型也是一樣的,比如直接新建一個 Math 模型,其有teacher 和 class屬性。直接新建添加,不做數據庫升級,也是直接crash。
當涉及到更改數據庫模型時就需要對數據庫進行升級操作了,realm數據庫升級操作很簡單。在AppDelegate中調用即可。

- (void)migrationRealm{
    // 在 [AppDelegate didFinishLaunchingWithOptions:] 中進行配置
    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
    // 設置新的架構版本。這個版本號必須高于之前所用的版本號(如果您之前從未設置過架構版本,那么這個版本號設置為 0)
    config.schemaVersion = 2;
    
    // 設置閉包,這個閉包將會在打開低于上面所設置版本號的 Realm 數據庫的時候被自動調用
    config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
        // 什么都不要做!Realm 會自行檢測新增和需要移除的屬性,然后自動更新硬盤上的數據庫架構
        if (oldSchemaVersion < 1) {
        }
    };
    // 告訴 Realm 為默認的 Realm 數據庫使用這個新的配置對象
    [RLMRealmConfiguration setDefaultConfiguration:config];
    
    // 現在我們已經告訴了 Realm 如何處理架構的變化,打開文件之后將會自動執行遷移
    [RLMRealm defaultRealm];
}

然后調用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //數據庫升級
    [self migrationRealm];
    return YES;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 由于最近項目中在用Realm,所以把自己實踐過程中的一些心得總結分享一下。 Realm是由Y Combina...
    一縷殤流化隱半邊冰霜閱讀 73,575評論 213 517
  • 跨平臺:現在很多應用都是要兼顧iOS和Android兩個平臺同時開發。如果兩個平臺都能使用相同的數據庫,那就不用考...
    CoderZS閱讀 2,558評論 2 16
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,523評論 25 708
  • 聲明 : 嚴禁讀者利用以下介紹知識點對網站進行非法操作 , 本文僅用于技術交流和學習 , 如果您利用文章中介紹的知...
    王一航閱讀 11,162評論 8 16
  • 接到了你的來信 ——艷齊 真的想馬上就去見你 只是不知 那路口是否還掛著標記 也曾相信黎明 相信云霞會鋪現出絢麗 ...
    MrME_Lee閱讀 185評論 0 0