Realm Objective-C 数据库操作
今天研究了一下Realm数据库,觉得特别厉害哈。Realm支持iOS,OS X,Android,速度快,操作相对来说比较简单。
最重要的是官网对于数据库版本升级和迁移的问题(这个在以前使用FMDB感觉是非常复杂的问题),提供了简单容易的办法。
下面使用object-C语言来操作常见的增,删,改,查操作。swift先暂时不写了,swift还不稳定,等2.0再说。
参考地址:
http://www.cocoachina.com/ios/20150505/11756.html
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需要做一个桥接转换。就这样。