数据处理安全

Realm Objective-C 数据库操作

2015-09-02  本文已影响4658人  kevingod

今天研究了一下Realm数据库,觉得特别厉害哈。Realm支持iOS,OS X,Android,速度快,操作相对来说比较简单。

最重要的是官网对于数据库版本升级和迁移的问题(这个在以前使用FMDB感觉是非常复杂的问题),提供了简单容易的办法。

下面使用object-C语言来操作常见的增,删,改,查操作。swift先暂时不写了,swift还不稳定,等2.0再说。

参考地址:

http://www.cocoachina.com/ios/20150505/11756.html 

https://realm.io/cn/ 

https://realm.io/docs/objc/latest/api/ 

1.Realm安装(参考官网,但是我有修改)


手动安装 (Objective-C & Swift)

下载最新的Realm发行版本并在本地解压缩.

从ios/或者osx/目录里,把Realm.framework文件拖动到你的Xcode开发项目里的File Navigator 中。确保Copy items into destination group’s folder已经被选中,按Finish

在Xcode file explorer中选中你要的开发项目.选择target,点击Build Phases选项. 在Link Binary with Libraries里按+, 添加libc++.dylib.

如果使用Realm + Swift, 拖动Swift/RLMSupport.swift到你的Xcode project的File Navigator中。点选Copy items if needed

如果在OSX项目中使用Realm,点击左上角的 + ,选择New Copy Files Phase,将其重命名为Copy Frameworks, 将Destination设置为Frameworks,并且添加Realm.framework。

特别强调,在iOS目录里面,有2个文件夹,请添加static文件夹的Realm.framework,我暂时不明白使用dynamic文件为什么会报错。

PS:Realm浏览器在需要在github里面找,在tools文件夹里面,官网的压缩包里面不存在这个。需要运行

Realm Browser项目,可以导出安装包,成为独立的安装包。

 

Realm Browser界面

创建一个测试项目,即可开始操作数据库。下面示例操作:


2.增加操作

@interface Person : RLMObject  //人员

@property NSInteger _ID;        //ID

@property NSString* name;      //姓名

@property NSInteger age;        //年龄

@property NSString* sex;        //性别

@end

创建一个人员类,继承RLMObject(必须继承)

//数据库操作对象

RLMRealm *realm = [RLMRealm defaultRealm];

//打开数据库事务

[realm transactionWithBlock:^(){

          Person* _temp = [[Person alloc] init];

          _temp._ID = ++_Count;    //计算的当前ID

          _temp.name = @"kevingao";

          _temp.age = 26;

          _temp.sex = @"male";

           //添加到数据库

           [realm addObject:_temp];

           //提交事务

           [realm commitWriteTransaction];

}];

一个简单的添加操作,其他事情不需要我们来管理,RLMRealm会帮助我们搞定。


3.查询操作

下面我们查询所有的数据。

//获得当前所有数据

RLMResults* tempArray = [Person allObjects];

for (Person* model in tempArray) {

      //打印数据

       NSLog(@"ID : %ld, name : %@, age : %ld , sex : %@",model._ID,model.name,model.age,model.sex);

}

查询操作可能是最复杂的操作,使用谓词或者是objectWhere语句来设计查询语句来查询。


4.修改操作

//数据库操作对象

RLMRealm *realm = [RLMRealm defaultRealm];

[realm transactionWithBlock:^(){

            //获得对象

           RLMResults* result = [Person allObjects];

           //获得第一个对象

           Person* temp = [result objectAtIndex:0];

           //修改sex

            temp.sex = @"ttt";

           //提交事务,即被修改

           [realm commitWriteTransaction];

}];


5.删除操作

//数据库操作对象

RLMRealm *realm = [RLMRealm defaultRealm];

[realm transactionWithBlock:^(){

          //获得对象

         RLMResults* result = [Person allObjects];

         //清空

         [realm deleteObject:result.firstObject];

}];

以上就简单的说了一下操作。

大家可以尝试下哈,水平有限,当改天再重新扩展一下内容。

PS:思考了一个小问题,如果使用MJExtension框架,因为需要继承,会和RLMObject发生冲突,所以Model需要做一个桥接转换。就这样。

上一篇下一篇

猜你喜欢

热点阅读