FMDB(1)

2017-12-10  本文已影响6人  初灬终

一.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语句,无需所有模型都写增删除改方法。

上一篇 下一篇

猜你喜欢

热点阅读