数据库的简单封装

来源:互联网 发布:数据挖掘:概念与技术 编辑:程序博客网 时间:2024/06/11 13:31
#import <Foundation/Foundation.h>@interface QHDatabaseManager : NSObject+ (instancetype)databaseManager;//创建表- (BOOL)insertIntoTableWithObject:(id)object;//查询所有数据- (NSArray *)queryAllUserObjectsFromDatabase;- (NSArray *)queryAllUserObjectsFromDatabaseWithParameters:(NSDictionary *)parameters;//更新数据- (BOOL)updateUserObjectWithParameters:(NSDictionary *)parameters;- (void)deleteUserObjectFromDatabaseWithName:(NSString *)name;- (BOOL)close;@end

#import "QHDatabaseManager.h"#import "FMDatabase.h"#import "User.h"@interface QHDatabaseManager(){    FMDatabase *_database;}@end@implementation QHDatabaseManager- (instancetype)init{    self = [super init];    if (self) {        //1.创建数据库        if(![self createDatabaseAndOPen])        {            //创建失败            return nil;        }                [self createUserTable];    }    return self;}#pragma mark - 单例创建//创建单例对象+ (instancetype)databaseManager{        static QHDatabaseManager *manager =nil;    @synchronized(self)    {        if(!manager)        {            manager = [[QHDatabaseManager alloc]init];        }    }    return manager;#if 0        //如果数据库创建失败 我们不能再次创建 以为gcd dispatch_once 方法只走一次    //GCD 的方法创建    static QHDatabaseManager *manager = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        manager = [[QHDatabaseManager alloc]init];    });    return manager;#endif}//返回数据库路径- (NSString *)databasePath{    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    return [documentPath stringByAppendingPathComponent:@"user.db"];}//创建数据库并打开- (BOOL)createDatabaseAndOPen{    //1.初始化数据库    _database = [FMDatabase databaseWithPath:[self databasePath]];        if (![_database open]) {        NSLog(@"打开失败");        return NO;    } else {        NSLog(@"打开成功");    }    //return YES;    return [_database open];}- (void)createUserTable{    NSString *sql = @"create table if not exists User(id integer primary key autoincrement,name text,age integer)";        BOOL isOK = [_database executeUpdate:sql];    if (isOK) {        NSLog(@"创建表成功");    }    else    {        NSLog(@"创建表失败");    }}//插入数据- (BOOL)insertIntoTableWithObject:(id)object{    #if 0    //NSString *sql = nil;        if ([object isKindOfClass:[User class]]) {                User *user = object;        return  [_database executeUpdate:[NSString stringWithFormat:@"insert into User (name,age) values('%@','%@')",user.name,@(user.age)]];    }    return NO;#endif        NSString *sql = nil;    if ([object isKindOfClass:[User class]]) {        User *user = object;        sql = @"insert into User (name,age) values(?,?)";        return [_database executeUpdate:sql,user.name,@(user.age)];    }        return NO;}//查询所有数据- (NSArray *)queryAllUserObjectsFromDatabase{    NSString *sql = @"select * from User";        //创建个数组保存模型    NSMutableArray *mArray = [NSMutableArray array];        FMResultSet *result = [_database executeQuery:sql];        while (result.next) {                //根据字段取值        NSString *name = [result stringForColumn:@"name"];        int age = [result intForColumn:@"age"];        User *user = [[User alloc]init];        user.name = name;        user.age = age;                [mArray addObject:user];    }    return mArray;}//有条件查询- (NSArray *)queryAllUserObjectsFromDatabaseWithParameters:(NSDictionary *)parameters{    NSMutableString *string = [NSMutableString string];        //获取字典所有的key    NSArray *allKeys = parameters.allKeys;        for (int i = 0; i < parameters.count; i++) {        //key        NSString *key = allKeys[i];                if (i == parameters.count -1) {            [string appendFormat:@"%@=%@",key,parameters[key]];        }        else        {            [string appendFormat:@"%@=%@ and",key,parameters[key]];        }    }    return nil;}- (BOOL)updateUserObjectWithParameters:(NSDictionary *)parameters{    return YES;}- (void)deleteUserObjectFromDatabaseWithName:(NSString *)name{    NSString *sql = @"delete from User where name = ?";    [_database executeUpdate:sql,name];}- (BOOL)close{    return [_database close];}@end

0 0
原创粉丝点击