前言
写这篇博文主要是为了介绍自己项目中自己写的数据库操作管理类,感觉很好用;我们可以对APP的一些用户信息,比如QQ的用户列表进行缓存;还有一些列表数据进行缓存,比如今日头条的列表数据缓存,从而达到用户体验上的优化,具体策略看大家APP的需求吧!
ZFJSqliteOperation是基于FMDB的一个操作管理类,主要对封装了一些常用的方法,比如:创建表、删除表、请空表和对表的增删改查的一些基本操作!这样做主要是给一些对数据库sql语言不熟悉的小伙伴使用,仅供参考!
功能
1.创建表
/** 创建表 @param tableName 表名 @param fieldNameModel 存放表字段的数据模型 @return 是否创建成功 */ - (BOOL)createTableWithtableName:(NSString *)tableName fieldNameModel:(NSObject *)fieldNameModel;使用示例:
BOOL isScu = [[ZFJSqliteOperation shareOperation] createTableWithtableName:ZFJDetailTable fieldNameModel:[DetailModel new]]; if(isScu){ NSLog(@"创建成功"); }
使用说明:
fieldNameModel传的是你的数据模型对象,然后会根据数据模型的属性进行穿件表结构。
2.删除表
/** 根据表名删除表 @param tableName 表名 @return 是否删除成功 */ - (BOOL)delectTableWithtableName:(NSString *)tableName;
使用示例:
BOOL isScu = [[ZFJSqliteOperation shareOperation] delectTableWithtableName:ZFJDetailTable]; if(isScu){ NSLog(@"删除成功"); }
3.清空表
/** 根据表名清空表 @param tableName 表名 @return 是否删除成功 */ - (BOOL)cleanTableWithtableName:(NSString *)tableName;
设个和上面两个方法一样,直接传表名就OK了。
4.数据插入
单条插入
/** 根据数据模型插入一条数据 @param tableName 表名 @param model 数据模型 @param completed 操作结果(YES:成功||NO:失败,错误信息提示) */ - (void)insertDataBaseWithtableName:(NSString *)tableName model:(NSObject *)model completed:(void(^)(BOOL isScu,NSString *meg))completed;使用示例
[[ZFJSqliteOperation shareOperation] insertDataBaseWithtableName:ZFJDetailTable model:model.detailModel completed:^(BOOL isScu, NSString *meg) { if(isScu){ NSLog(@"插入成功"); }else{ NSLog(@"meg == %@",meg); } }];
使用说明:
插入的模型字段要和表结构字段一致,不然会插入失败!
多条插入
/** 根据数据模型数组插入多条数据 @param tableName 表名 @param modelArr 数据模型数组 @param completed 操作结果(失败的对象数组集合) */ - (void)insertsDataBaseWithtableName:(NSString *)tableName modelArr:(NSArray *)modelArr completed:(void(^)(NSArray *failArr))completed;这里面传的是数据模型的数据就OK了;
5.删除数据
根据字段删除
/** 根据表的一个字段和一个值删除一条数据 @param tableName 表名 @param fieldName 表的字段名 @param fieldNameValue 表的字段名所对应的值 @param completed 操作结果(YES:成功||NO:失败,错误信息提示) */ - (void)delectDataBaseWithtableName:(NSString *)tableName fieldName:(NSString *)fieldName fieldNameValue:(NSString *)fieldNameValue completed:(void(^)(BOOL isScu,NSString *meg))completed;
使用示例
[[ZFJSqliteOperation shareOperation] delectDataBaseWithtableName:KTableName fieldName:@"userNO" fieldNameValue:@"116" completed:^(BOOL isScu, NSString *meg) { if(isScu){ NSLog(@"删除成功"); }else{ NSLog(@"meg == %@",meg); } }];使用说明
删除userID是116的数据;注意fieldName的值要和表结构的字段相对应。
多条件删除
/** 根据条件删除多条数据 @param tableName 表名 @param parameter 键值对查询条件 @param selectType 键值对查询条件的关系(and \\ or) @param completed 操作结果(查询结果,错误信息提示) */ - (void)delectDataBaseWithtableName:(NSString *)tableName byParameter:(NSDictionary *)parameter selectType:(SelectType)selectType completed:(void(^)(BOOL isScu,NSString *meg))completed;
使用示例
NSDictionary *dict = @{@"userNO":@"486",@"age":@"3"}; [[ZFJSqliteOperation shareOperation] delectDataBaseWithtableName:KTableName byParameter:dict selectType:KAndType completed:^(BOOL isScu, NSString *meg) { if(isScu){ NSLog(@"删除成功"); }else{ NSLog(@"meg == %@",meg); } }];使用说明
byParameter是多条件的键值对,我这里面删除的是userID是486的并且age是3的用户;selectType是个枚举,你来选择是or关系还是and关系。
自己写删除条件语句
/** 自己写条件删除 @param tableName 表名 @param sqlStr 键值对查询条件(例如:name = '张福杰' and sex = '保密') @param completed 操作结果(查询结果,错误信息提示) */ - (void)delectDataBaseWithtableName:(NSString *)tableName sqlStr:(NSString *)sqlStr completed:(void(^)(BOOL isScu,NSString *meg))completed;使用示例
NSString *sqlStr = @"name = '张福杰' and sex = '保密'"; [[ZFJSqliteOperation shareOperation] delectDataBaseWithtableName:KTableName sqlStr:sqlStr completed:^(BOOL isScu, NSString *meg) { if(isScu){ NSLog(@"删除成功"); }else{ NSLog(@"meg == %@",meg); } }];
6.数据更新
更新一条数据
/** 根据表的一个字段更新一条数据 @param tableName 表名 @param fieldName 表的字段名 @param model 需要更新的所以字段 @param completed 操作结果(YES:成功||NO:失败,错误信息提示) */ - (void)updataTableWithtableName:(NSString *)tableName fieldName:(NSString *)fieldName model:(NSObject *)model completed:(void(^)(BOOL isScu,NSString *meg))completed;使用示例
[[ZFJSqliteOperation shareOperation] updataTableWithtableName:KTableName fieldName:@"userID" model:model completed:^(BOOL isScu, NSString *meg) { if(isScu){ NSLog(@"更新成功"); }else{ NSLog(@"meg == %@",meg); } }];更新多条数据
/** 根据表的一个字段更新多条数据 @param tableName 表名 @param fieldName 表的字段名 @param modelArr 需要更新的所以字段数组 @param completed 操作结果(更新失败的数组,错误信息提示) */ - (void)updataTableWithtableName:(NSString *)tableName fieldName:(NSString *)fieldName modelArr:(NSArray *)modelArr completed:(void(^)(NSArray *failArr,NSString *meg))completed;使用示例
[[ZFJSqliteOperation shareOperation] updataTableWithtableName:KTableName fieldName:@"userID" modelArr:modelArr completed:^(NSArray *failArr, NSString *meg) { if(failArr.count == 0){ NSLog(@"更新成功"); }else{ NSLog(@"meg == %@",meg); } }];
7.数据查询
查询全部
/** 查询表里面的全部数据 @param tableName 表名 @param completed 操作结果(查询结果,错误信息提示) */ - (void)selectAllDataBaseWithtableName:(NSString *)tableName completed:(void(^)(NSArray *resultArr,NSString *meg))completed;使用方法和上面的更新差不多,这里就不举例了。
根据条件查询
/** 根据参数条件查询 @param tableName 表名 @param parameter 键值对查询条件 @param selectType 键值对查询条件的关系(and \\ or) @param completed 操作结果(查询结果,错误信息提示) */ - (void)selectAllDataBaseWithtableName:(NSString *)tableName byParameter:(NSDictionary *)parameter selectType:(SelectType)selectType completed:(void(^)(NSArray *resultArr,NSString *meg))completed;
这里的使用方法和删除差不多;
自己写查询条件
/** 自己写条件查询语句 @param tableName 表名 @param sqlStr 条件查询语句(例如:name = '张福杰' and sex = '保密') @param completed 操作结果(查询结果,错误信息提示) */ - (void)selectAllDataBaseWithtableName:(NSString *)tableName sqlStr:(NSString *)sqlStr completed:(void(^)(NSArray *resultArr,NSString *meg))completed;
8.表新增字段
/** 给表添加新的字段 @param tableName 表名 @param propertyName 新的字段 @param completed 操作结果(YES:成功||NO:失败,错误信息提示) */ - (void)addNewPropertyWithtableName:(NSString *)tableName propertyName:(NSString *)propertyName completed:(void(^)(BOOL isScu,NSString *meg))completed;使用示例
新增ZFJNewType的字段
[[ZFJSqliteOperation shareOperation] addNewPropertyWithtableName:ZFJDetailTable propertyName:@"ZFJNewType" completed:^(BOOL isScu, NSString *meg) { if(isScu){ NSLog(@"新增成功"); }else{ NSLog(@"meg == %@",meg); } }];
操作以后
代码下载
点击下载:http://download.csdn.net/download/u014220518/10013534