fmdb经常用到,我感觉学习程序的人都会用到数据存储,可是每个语言开发用到的数据库理论是一样的,都是增,删,改,查,ios经常用到fmdb,

1.先实例化一个

#import <Foundation/Foundation.h>

#import "FMDatabase.h"

@interface LNFmdbDate : NSObject

@property (nonatomic ,strong)FMDatabase *db;

@end


#import "LNFmdbDate.h"


@implementation LNFmdbDate


- (instancetype)init

{

    if (self = [super init]) {

        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"OfflineData.sqlite"];

        self.db = [FMDatabase databaseWithPath:path];

    }

    return self;

}


@end

2.继承上面的那个



#import "LNFmdbDate.h"


@interface LNSearchOffine : LNFmdbDate


/**

 *  快速获得实例

 *

 *  @return LNSearchOffine对象

 */

+ (instancetype)shareOffline;


/**

 *  向数据库表中添加名字

 *

 *  @param model 名字详情

 *

 *  @return 插入成功返回YES,失败返回NO

 */

- (BOOL) inserData:(NSDictionary *)model anCity:(NSString *)cityName;


/**

 *  从数据库表中取出所有名字

 *

 *  @return 所有名字信息

 */

- (NSArray*)getAllData:(NSString *)cityName;

/**

 *

 *

 *  @return 判断是否收藏

 */

- (BOOL)isBleanOffineData:(NSString *)name anCity:(NSString *)cityName;



/**

 *  从数据库表中删除指定的名字

 *

 *  @param aName 指定的名字

 *

 *  @return 删除成功返回YES,失败返回NO

 */

- (BOOL) deleteName:(NSString *)aName anCity:(NSString *)cityName;


/**

 *  从数据库表中名字

 *

 *  @return 删除成功返回YES,失败返回NO

 */

- (BOOL) deleteDetail:(NSString *)cityName;


@end


#import "LNSearchOffine.h"


#define COLLECT @"t_Offtin"


@implementation LNSearchOffine


static id _instance;


+ (instancetype)shareOffline;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _instance = [[self alloc] init];

    });

    return _instance;

}


- (instancetype)init

{

    if (self = [super init]) {

        

        // 打开数据库

        if ([self.db open]) {

            NSLog(@"数据库打开成功");

            // 创表

            [self.db executeUpdateWithFormat:@"CREATE TABLE IF NOT EXISTS COLLECT (id integer NOT NULL PRIMARY KEY AUTOINCREMENT,city text,name text,data blob);"];

        } else {

            NSLog(@"数据库打开失败");

        }

    }

    return self;

}


/**

 *  向数据库表中添加名字

 *

 *  @param station 名字详情

 *

 *  @return 插入成功返回YES,失败返回NO

 */

- (BOOL) inserData:(NSDictionary *)model anCity:(NSString *)cityName;

{

    NSString *name = model[@"name"];

    NSArray *resultArry = [self getAllStation:cityName];

    for(NSDictionary *dicm  in resultArry)

    {

        if([name isEqualToString:dicm[@"name"]])

        {

            [self deleteStationWithStationName:name anCity:cityName];

        }

    }

    NSMutableData *data = [[NSMutableData alloc] init];

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

    [archiver encodeObject:model forKey:@"SomekeyValue"];

    [archiver finishEncoding];

    BOOL result = [self.db executeUpdateWithFormat:@"INSERT INTO COLLECT (city,name,data) VALUES (%@,%@,%@);",cityName,name,data];

    return result;

}


/**

 *  从数据库表中取出所有名字

 *

 *  @return 所有名字信息

 */

- (NSArray*)getAllData:(NSString *)cityName;

{

    NSMutableArray * array = [NSMutableArray array];

    FMResultSet *result = [self.db executeQueryWithFormat:@"SELECT * FROM COLLECT WHERE city =%@;",cityName];

    while (result.next) {

        NSData *data = [result dataForColumn:@"data"];

        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

        NSDictionary *myDictionary = [unarchiver decodeObjectForKey:@"SomekeyValue"];

        [unarchiver finishDecoding];

        [array addObject:myDictionary];

    }

    return array;

}


+ (instancetype)allocWithZone:(struct _NSZone *)zone

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _instance = [super allocWithZone:zone];

    });

    return _instance;

}



- (BOOL)isBleanOffineData:(NSString *)name anCity:(NSString *)cityName;

{

    BOOL result = NO;

    NSArray *arry = [self getAllStation:cityName];

    for(int i = 0 ;i<arry.count; ++i)

    {

        NSDictionary *dic = arry[i];

        NSString *cityName = dic[@"name"];

        if([name isEqualToString:cityName])

        {

            return YES;

        }

    }

    return result;

}


- (BOOL) deleteName:(NSString *)aName anCity:(NSString *)cityName;

    BOOL result = [self.db executeUpdateWithFormat:@"DELETE FROM COLLECT WHERE name =%@ and city = %@;",stationName,cityName];

    return result;

}


- (BOOL) deleteDetail:(NSString *)cityName;

{

    BOOL result = [self.db executeUpdateWithFormat:@"DELETE FROM COLLECT WHERE city =%@;",cityName];

    return result;

}



@end