realm數據庫的理論知識在[realm數據開發(fā)(一)]http://www.itdecent.cn/p/76b6d08d938e 中已經將結果了,本節(jié)只對realm數據庫的使用進行講解,增、刪、改、查
獲取數據庫路徑
獲取默認的數據庫
+(RLMRealm *)getDefaultRealm {
defaultRealm = [RLMRealm defaultRealm];
return defaultRealm;
}
指定的自定義數據庫
+(RLMRealm *)getCustomRealm{
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *realmPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.realm",realmName]];
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.fileURL = [NSURL fileURLWithPath:path];
config.objectClasses = @[KKExamRLMModel.class,KKInquiryRLMModel.class];
config.readOnly = NO;
config.schemaVersion = realmVersion;
config.migrationBlock = ^(RLMMigration *migration , uint64_t oldSchemaVersion) { // 這里是設置數據遷移的block
if (oldSchemaVersion < realmVersion) {
}
};
[RLMRealmConfiguration setDefaultConfiguration:config];
customRealm = [RLMRealm realmWithURL:[NSURL fileURLWithPath:realmPath]];
return customRealm;
}
數據查詢
/**
獲取所有的數據集
@param descriptors 排序器(RLMSortDescriptor類型,不排序傳nil即可)
@return 所有的數據集
*/
+(RLMResults *)getAllObjectsWithSortedDescriptors:(NSArray *)descriptors{
RLMResults *results=nil;
RLMRealm* realm=[self getCustomRealm];
if (realm) {
results=[self allObjectsInRealm:realm];
}
if (results&&descriptors) {
results=[results sortedResultsUsingDescriptors:descriptors];
}
return results;
}
/**
獲取所有的數據集(適合根據單個屬性進行排序)
@param keyPath 排序關鍵字(不排序則傳傳nil)
@return 所有的數據集
*/
+(RLMResults *)getAllObjectSortedByKePath:(NSString *)keyPath ascending:(BOOL)ascending {
RLMResults *results=nil;
RLMRealm* realm=[self getCustomRealm];
if (realm) {
results=[self allObjectsInRealm:realm];
}
if (results&&keyPath) {
results=[results sortedResultsUsingKeyPath:keyPath ascending:ascending];
}
return results;
}
/**
通過字符串查詢(適合根據多個屬性進行排序)
@param where 查詢條件字符串(指定數據庫需要傳入數據庫名字,默認數據庫需要傳入nil即可)
@param descriptors 排序器(RLMSortDescriptor類型,不排序傳nil即可)
@return 結果集
*/
+(RLMResults *)getObjetctsWithWhere:(NSString *)where sortedDescriptors:(NSArray *)descriptors {
RLMResults *results=nil;
RLMRealm* realm=nil;
realm=[self getCustomRealm];
if (realm) {
results=[self objectsInRealm:realm where:where];
}
if (descriptors&&results) {
results=[results sortedResultsUsingDescriptors:descriptors];
}
return results;
}
/**
通過字符串查詢(適合根據單個屬性進行排序)
@param where 查詢條件字符串(指定數據庫需要傳入數據庫名字,默認數據庫需要傳入nil即可)
@param keyPath 排序關鍵字(不排序傳nil即可)
@param ascending 是否升序排列
@return 結果集
*/
+(RLMResults *)getObjetctsWithWhere:(NSString *)where sortedByKePath:(NSString *)keyPath ascending:(BOOL)ascending {
RLMResults *results=nil;
RLMRealm* realm=nil;
realm=[self getCustomRealm];
if (realm) {
results=[self objectsInRealm:realm where:where];
}
if (keyPath&&results) {
results=[results sortedResultsUsingKeyPath:keyPath ascending:YES];
}
return results;
}
/**
通過謂詞查詢數據集(適合根據多個屬性進行排序)
@param predicate 查詢謂詞
@param descriptors 排序器(RLMSortDescriptor類型,不排序傳nil即可)
@return 結果集
*/
+(RLMResults *)getObjectWithPredicate:(NSPredicate *)predicate sortedDescriptors:(NSArray *)descriptors {
RLMRealm* realm=nil;
RLMResults* results=nil;
realm=[self getCustomRealm];
if (realm) {
results=[self objectsInRealm:realm withPredicate:predicate];
}
if (descriptors&&results) {
results=[results sortedResultsUsingDescriptors:descriptors];
}
return results;
}
/**
通過謂詞查詢數據集(適合根據單個屬性進行排序)
@param predicate 查詢謂詞
@param keyPath 排序關鍵字(不排序傳nil即可)
@param ascending 是否升序排列
@return 結果集
*/
+(RLMResults *)getObjectWithPredicate:(NSPredicate *)predicate sortedByKePath:(NSString *)keyPath ascending:(BOOL)ascending {
RLMRealm* realm=nil;
RLMResults* results=nil;
realm=[self getCustomRealm];
if (realm) {
results=[self objectsInRealm:realm withPredicate:predicate];
}
if (keyPath&&results) {
results=[results sortedResultsUsingKeyPath:keyPath ascending:ascending];
}
return results;
}
數據的增加和更新
/**
對數據庫進行增加或者更新當個對象
@param ojbect 單個對象
@param block 解決更新屬性前必須beginWriteTransaction的操作。
*/
+(void)addorUpdateWithObject:(RLMObject *)ojbect afterBlock:(void (^)(void))block {
RLMRealm* realm=nil;
realm=[self getCustomRealm];
if (realm) {
[realm beginWriteTransaction];
block();
[realm addOrUpdateObject:ojbect];
[realm commitWriteTransaction];
}
}
/**
對數據庫進行增加或者更新數組集
@param objects 數據集
@param block 解決更新屬性前必須beginWriteTransaction的操作。
*/
+(void)addorUpdateWithObjects:(id)objects afterBlock:(void (^)(void))block{
RLMRealm* realm=nil;
realm=[self getCustomRealm];
if (realm) {
[realm beginWriteTransaction];
block();
[realm addOrUpdateObjectsFromArray:objects];
[realm commitWriteTransaction];
}
}
/**
添加數據(不含更新)
@param object 增加或者更新的對象
*/
+(void)addSingleObject:(RLMObject *)object {
RLMRealm* realm=nil;
realm=[self getCustomRealm];
[realm transactionWithBlock:^{
[realm addObject:object];
[realm commitWriteTransaction];
}];
}
需要注意的是數據更新時候必須先beginWriteTransaction,然后改變對象的屬性,所以增加afterBlock這個回調來進行處理
數據刪除
/**
刪除單個對象
@param object 刪除對象
*/
+(void)deleteObject:(RLMObject *)object {
RLMRealm* realm=nil;
realm=[self getCustomRealm];
if (realm) {
[realm transactionWithBlock:^{
[realm deleteObject:object];
[realm commitWriteTransaction];
}];
}
}
/**
刪除一組realm數據
@param objects realm對象的數組
*/
+(void)deleteObjects:(id)objects{
RLMRealm* realm=nil;
realm=[self getCustomRealm];
if (realm) {
[realm transactionWithBlock:^{
[realm deleteObjects:objects];
[realm commitWriteTransaction];
}];
}
}
/**
通過謂詞刪除指定數據
@param predicate 謂詞
*/
+(void)deleteObjectsWithPredicate:(NSPredicate *)predicate {
RLMResults *objects = [self getObjectWithPredicate:predicate sortedDescriptors:nil];
if (objects&&objects.count>0) {
[self deleteObjects:objects];
}
}
/**
通過where字符串數據指定數據
@param where where字符串
*/
+(void)deleteObjectsWithWhere:(NSString *)where {
RLMResults *objects = [self getObjetctsWithWhere:where sortedDescriptors:nil];
NSLog(@"objectCount:%ld",objects.count);
if (objects&&objects.count>0) {
[self deleteObjects:objects ];
}
}
/**
刪除數據庫中的所有數據
*/
+(void)deleteAllObjects {
RLMRealm *realm=nil;
realm=[self getCustomRealm];
if (realm) {
[realm transactionWithBlock:^{
[realm deleteAllObjects];
[realm commitWriteTransaction];
}];
}
}
本文知識對realm對象的基類進行封裝,[realm數據庫開發(fā)(三)]http://www.itdecent.cn/p/1fe59ede20d6 將對ream數據庫具體對象使用增刪改查的方法進行再次封裝。