- 主要实现逻辑
未命名.gif通过继承
HWFMDBModel
,在操作数据库时,内部通过runtime
获取模型的属性列表,通过手动拼接SQL
语句来实现数据的增删改查
,废话不多说了直接代码
-
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
的开启关闭做任何操作,开启关闭须自行管理
网友评论