首页 > 移动平台 > 详细

把数据库文件从工程中移动到本地

时间:2015-11-13 13:20:41      阅读:224      评论:0      收藏:0      [点我收藏+]

最近有这么一个需求,数据库初始的时候就已经有一个表中有数据了,这导致我们之前在程序运行的时候,再在本地创建数据库的方案不能使用了.因为程序运行时,再创建数据库和表,肯定都是空的.如果要有数据,就必须写n多条的插入语句.最终,我们觉得把已经创建好的数据库,放到工程文件,Supporting Files .然后在程序运行的时候,把数据库移动到本地,作为本地数据库使用.

//  SQLManager.h

#import <Foundation/Foundation.h>

@interface  SQLManager : NSObject

+ (instancetype)sharedMapSQLite;

- (NSArray *)totalGroupOfT_cityWithNameSort:(NSString *)nameSort;

@end

//  SQLManager.m

#import "SQLManager.h"

#import "FMDB.h"


@interface SQLManager ()

@property (nonatomic, strong) FMDatabaseQueue* queue;

@end

@implementation SQLManager

+ (instancetype)sharedSQLManager {

    static SQLManager* manager;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        manager = [[MapSQLite alloc] init];

        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

        path = [path stringByAppendingPathComponent:@"list.db"];

        NSData *data=[NSData dataWithContentsOfFile:path];

        

        if (!data) {

            NSString *backupDbPath = [[NSBundle mainBundle]

                                      pathForResource:@"list"

                                      ofType:@"db"];

            NSFileManager *fm = [NSFileManager defaultManager];

            

            NSError *error;

            BOOL cp = [fm copyItemAtPath:backupDbPath toPath:path error:&error];

            NSLog(@"%@",error);

        }

        

        manager.queue = [FMDatabaseQueue databaseQueueWithPath:path];

        NSLog(@"path == %@",path);

    });

     return manager;

}


//根据传入的字母主键 返回主键所在色数组

- (NSArray *)totalGroupOfT_cityWithNameSort:(NSString *)nameSort

{

    NSString* loadStatement = @"SELECT * FROM T_city WHERE  nameSort = ?;";

    NSMutableArray *arrayM = [NSMutableArray array];

    [self.queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

        FMResultSet* result = [db executeQuery:loadStatement withArgumentsInArray:@[nameSort]];

        while ([result next]) {

            NSString *strgroup = [result stringForColumn:@"CityName"];

            [arrayM addObject:strgroup]; 

        }

    }];

    return arrayM.copy;

    

}


// 调用

    SQLManager *manager = [SQLManager sharedMapSQLite];

    NSArray *array = [manager totalGroupOfT_cityWithNameSort:@"A"];

    NSLog(@"%@",array);


把数据库文件从工程中移动到本地

原文:http://my.oschina.net/u/2418942/blog/529804

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!