美文网首页
OC-FMDB二次封装(面向模型开发)

OC-FMDB二次封装(面向模型开发)

作者: SK丿希望 | 来源:发表于2019-04-11 18:01 被阅读0次
    • 主要实现逻辑

    通过继承HWFMDBModel,在操作数据库时,内部通过runtime获取模型的属性列表,通过手动拼接SQL语句来实现数据的增删改查,废话不多说了直接代码

    未命名.gif
    • HWFMDBModel介绍
    /** 注意:添加必须大写 用于记录添加数据id */
    @property (nonatomic, assign) NSInteger ID;
    
    /** 创建表 */
    + (BOOL)hw_createTableWithName:(NSString *)tableName db:(FMDatabase *)db;
    /** 插入数据 */
    - (BOOL)hw_insertTableWithName:(NSString *)tableName db:(FMDatabase *)db;
    /** 删除数据 */
    - (BOOL)hw_deleteTableWithName:(NSString *)tableName db:(FMDatabase *)db;
    /** 更新数据 */
    - (BOOL)hw_updateTableWithName:(NSString *)tableName db:(FMDatabase *)db;
    /** 查询数据 */
    + (NSArray *)hw_queryTableWithName:(NSString *)tableName db:(FMDatabase *)db;
    
    简单使用
    • 首先定义模型继承HWFMDBModel
    #import <Foundation/Foundation.h>
    #import "HWFMDBModel.h"
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface FMDBItem : HWFMDBModel
    /** <#注释#> */
    @property(nonatomic, strong) NSString *name;
    /** <#注释#> */
    @property(nonatomic, assign) NSInteger age;
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    • 在控制器中创建DB(这里用的懒加载)
    @property(nonatomic, strong) FMDatabase *db;
    
    - (FMDatabase *)db {
        if (!_db) {
            NSString *docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
            NSString *dbPath = [docuPath stringByAppendingPathComponent:@"text.db"];
            NSLog(@"数据库路径:%@",dbPath);
            _db = [FMDatabase databaseWithPath:dbPath];
        }
        return _db;
    }
    
             // 直接通过模型类方法创建模型
            BOOL tag = [FMDBItem hw_createTableWithName:tableName db:self.db];
            if (tag) {
                NSLog(@"创建成功");
            } else {
                NSLog(@"创建失败");
            }
    
    • 插入数据
            FMDBItem *item = [FMDBItem new];
            NSInteger num = arc4random() % 1000;
            item.name = [NSString stringWithFormat:@"李含文%ld",num];
            item.age = num;
            BOOL tag = [item hw_insertTableWithName:tableName db:self.db];
            if (tag) {
                NSLog(@"插入成功");
                [weakSelf loadData];
            } else {
                NSLog(@"插入失败");
            }
    
    • 查询数据
       NSArray *itemArray = [FMDBItem hw_queryTableWithName:tableName db:self.db];
    
    • 更新数据
        FMDBItem *item = self.itemArray[indexPath.row];
        item.name = @"李含文";
        item.age = 18;
        BOOL tag = [item hw_updateTableWithName:tableName db:self.db];
        if (tag) {
            NSLog(@"操作成功");
            [self.tableView reloadData];
        } else {
            NSLog(@"操作失败");
        }
    
    • 删除数据(直接用模型删除)
        FMDBItem *item = self.itemArray[indexPath.row];
        BOOL tag = [item hw_deleteTableWithName:@"text" db:self.db]; // 删除操作
        if (tag) {
            NSLog(@"删除成功");
        } else {
            NSLog(@"删除失败");
        }
    
    • 删除表
           NSString *sql = [NSString stringWithFormat:@"DROP TABLE IF EXISTS %@", tableName];
            BOOL tag = [self.db executeUpdate:sql];
            if (tag) {
                NSLog(@"删除成功");
            } else {
                NSLog(@"删除失败");
            }
    

    Dome
    注意:本文没有对DB的开启关闭做任何操作,开启关闭须自行管理

    相关文章

      网友评论

          本文标题:OC-FMDB二次封装(面向模型开发)

          本文链接:https://www.haomeiwen.com/subject/znjxwqtx.html