前言
写这篇博文主要是为了介绍自己项目中自己写的数据库操作管理类,感觉很好用;我们可以对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