今天研究了一下Realm數(shù)據(jù)庫,覺得特別厲害哈。Realm支持iOS,OS X,Android,速度快,操作相對來說比較簡單。
最重要的是官網(wǎng)對于數(shù)據(jù)庫版本升級和遷移的問題(這個在以前使用FMDB感覺是非常復(fù)雜的問題),提供了簡單容易的辦法。
下面使用object-C語言來操作常見的增,刪,改,查操作。swift先暫時不寫了,swift還不穩(wěn)定,等2.0再說。
參考地址:
http://www.cocoachina.com/ios/20150505/11756.html?
https://realm.io/docs/objc/latest/api/?
1.Realm安裝(參考官網(wǎng),但是我有修改)
手動安裝 (Objective-C & Swift)
下載最新的Realm發(fā)行版本并在本地解壓縮.
從ios/或者osx/目錄里,把Realm.framework文件拖動到你的Xcode開發(fā)項目里的File Navigator 中。確保Copy items into destination group’s folder已經(jīng)被選中,按Finish。
在Xcode file explorer中選中你要的開發(fā)項目.選擇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設(shè)置為Frameworks,并且添加Realm.framework。
特別強調(diào),在iOS目錄里面,有2個文件夾,請?zhí)砑觭tatic文件夾的Realm.framework,我暫時不明白使用dynamic文件為什么會報錯。
PS:Realm瀏覽器在需要在github里面找,在tools文件夾里面,官網(wǎng)的壓縮包里面不存在這個。需要運行
Realm Browser項目,可以導(dǎo)出安裝包,成為獨立的安裝包。
?

創(chuàng)建一個測試項目,即可開始操作數(shù)據(jù)庫。下面示例操作:
2.增加操作
@interface Person : RLMObject? //人員
@property NSInteger _ID;? ? ? ? //ID
@property NSString* name;? ? ? //姓名
@property NSInteger age;? ? ? ? //年齡
@property NSString* sex;? ? ? ? //性別
@end
創(chuàng)建一個人員類,繼承RLMObject(必須繼承)
//數(shù)據(jù)庫操作對象
RLMRealm *realm = [RLMRealm defaultRealm];
//打開數(shù)據(jù)庫事務(wù)
[realm transactionWithBlock:^(){
????????? Person* _temp = [[Person alloc] init];
????????? _temp._ID = ++_Count;??? //計算的當(dāng)前ID
????????? _temp.name = @"kevingao";
????????? _temp.age = 26;
????????? _temp.sex = @"male";
?????????? //添加到數(shù)據(jù)庫
?????????? [realm addObject:_temp];
?????????? //提交事務(wù)
?????????? [realm commitWriteTransaction];
}];
一個簡單的添加操作,其他事情不需要我們來管理,RLMRealm會幫助我們搞定。
3.查詢操作
下面我們查詢所有的數(shù)據(jù)。
//獲得當(dāng)前所有數(shù)據(jù)
RLMResults* tempArray = [Person allObjects];
for (Person* model in tempArray) {
????? //打印數(shù)據(jù)
?????? NSLog(@"ID : %ld, name : %@, age : %ld , sex : %@",model._ID,model.name,model.age,model.sex);
}
查詢操作可能是最復(fù)雜的操作,使用謂詞或者是objectWhere語句來設(shè)計查詢語句來查詢。
4.修改操作
//數(shù)據(jù)庫操作對象
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^(){
??????????? //獲得對象
?????????? RLMResults* result = [Person allObjects];
?????????? //獲得第一個對象
?????????? Person* temp = [result objectAtIndex:0];
?????????? //修改sex
??????????? temp.sex = @"ttt";
?????????? //提交事務(wù),即被修改
?????????? [realm commitWriteTransaction];
}];
5.刪除操作
//數(shù)據(jù)庫操作對象
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^(){
????????? //獲得對象
???????? RLMResults* result = [Person allObjects];
???????? //清空
???????? [realm deleteObject:result.firstObject];
}];
以上就簡單的說了一下操作。
大家可以嘗試下哈,水平有限,當(dāng)改天再重新擴展一下內(nèi)容。
PS:思考了一個小問題,如果使用MJExtension框架,因為需要繼承,會和RLMObject發(fā)生沖突,所以Model需要做一個橋接轉(zhuǎn)換。就這樣。