iOS-基于FMDB的操作封装,模型对象的增删改查

前言

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






猜你喜欢

转载自blog.csdn.net/u014220518/article/details/78189927