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

2019-04-11  本文已影响0人  SK丿希望

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

未命名.gif
/** 注意:添加必须大写 用于记录添加数据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;
简单使用
#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
@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的开启关闭做任何操作,开启关闭须自行管理

上一篇 下一篇

猜你喜欢

热点阅读