Realm数据库操作

realm官网: https://realm.io/cn/docs/objc/latest/
1.将Realm库pod到工程中

pod 'Realm'

2.建立数据模型

#import 

@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数据库操作)