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

  • 主要实现逻辑

通过继承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的开启关闭做任何操作,开启关闭须自行管理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容