一.FMDB简单使用
#import <Foundation/Foundation.h>
@class Person;
@interface DataBase : NSObject
@property(nonatomic,strong) Person *person;
+ (instancetype)sharedDataBase;
#pragma mark - Person
- (void)addPerson:(Person *)person;
- (void)deletePerson:(Person *)person;
- (void)updatePerson:(Person *)person;
- (NSMutableArray *)getAllPerson;
#import "DataBase.h"
#import <FMDB.h>
#import "Person.h"
static DataBase *_DBCtl = nil;
@interface DataBase()
@property (nonatomic, strong) FMDatabase *db;
@end
@implementation DataBase
+ (instancetype)sharedDataBase{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_DBCtl = [[DataBase alloc] init];
[_DBCtl initDataBase];
});
return _DBCtl;
}
- (void)initDataBase{
// 文件路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"model.sqlite"];
// 实例化FMDataBase对象
_db = [FMDatabase databaseWithPath:filePath];
[self createTable];
}
#pragma mark - 接口
//创建表
- (void)createTable {
[_db open];
// 初始化数据表
NSString *personSql = @"CREATE TABLE `person` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,`person_id` VARCHAR(255),`person_name` VARCHAR(255),`person_age` VARCHAR(255),`person_number` VARCHAR(255)) ";
NSString *carSql = @"CREATE TABLE `car` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,`own_id` VARCHAR(255),`car_id` VARCHAR(255),`car_brand` VARCHAR(255),`car_price`bVARCHAR(255)) ";
[_db executeUpdate:personSql];
[_db executeUpdate:carSql];
[_db close];
}
//增加数据
- (void)addPerson:(Person *)person{
[_db open];
[_db executeUpdate:@"INSERT INTO person(person_name,person_age,person_number)VALUES(?,?,?,?)",person.name,@(person.age),@(person.number)];
[_db close];
}
//删除数据
- (void)deletePerson:(Person *)person{
[_db open];
[_db executeUpdate:@"DELETE FROM person WHERE person_id = ?",person.ID];
[_db close];
}
// 更新数据
- (void)updatePerson:(Person *)person{
[_db open];
[_db executeUpdate:@"UPDATE `person` SET person_name = ? WHERE person_id = ? ",person.name,person.ID];
[_db executeUpdate:@"UPDATE `person` SET person_age = ? WHERE person_id = ? ",@(person.age),person.ID];
[_db executeUpdate:@"UPDATE `person` SET person_number = ? WHERE person_id = ? ",@(person.number + 1),person.ID];
[_db close];
}
//获取所有数据
- (NSMutableArray *)getAllPerson{
[_db open];
NSMutableArray *dataArray = [[NSMutableArray alloc] init];
FMResultSet *res = [_db executeQuery:@"SELECT * FROM person"];
while ([res next]) {
Person *person = [[Person alloc] init];
person.ID = @([[res stringForColumn:@"person_id"] integerValue]);
person.name = [res stringForColumn:@"person_name"];
person.age = [[res stringForColumn:@"person_age"] integerValue];
person.number = [[res stringForColumn:@"person_number"] integerValue];
[dataArray addObject:person];
}
[_db close];
return dataArray;
}
@end
问题:如果像上边那样子,基本上每个模型,都要写对应的增删除改方法,对应的实现里都要写mysql语句,相当繁琐易出错。
改进:用runtime拼接mysql语句,无需所有模型都写增删除改方法。
网友评论