首页 > 数据库技术 > 详细

FMDB的使用方法

时间:2015-12-15 00:46:50      阅读:263      评论:0      收藏:0      [点我收藏+]

 

1.建表

我们可以使用代码建表, 不过代码建表的话代码会比较复杂, 所以这里我们使用工具建表, 工具名字是 SQLiteManager, 百度云下载地址为: http://pan.baidu.com/s/1hq6TtAk
打开 SQLiteManager 工具,创建 SQLite 文件,  如下图:
技术分享
 
SQLite 文件创建完毕以后 建表:如下图
技术分享
 
 
2. 把创建好的 SQLite 文件拖进工程里面
 
这时候工程里面就有我们刚才创建的 SQLite 文件和里面的表了
技术分享
 
3. 引入 FMDB 框架
技术分享
同时需要引入系统框架  libsqlite3,xcode6为 dylib 后缀, xcode7为 tbd 后缀。
4. 框架使用
1. 由于工程中的文件在打包以后是不能再被修改的, 所以我们不能使用工程里面的 SQLite 文件进行数据存储,我们现在把工程中的文件 copy 进沙盒里面, 这样沙盒里面就有一个一个这样的文件。
 
在.m中引入头文件以及设置属性

#import "DBManager.h"

#import "FMDB.h"

#import "Person.h"

@interface DBManager()

@property(nonatomic, strong)FMDatabaseQueue *openQueue;

@property(nonatomic, copy)NSString *filePath;

@end

 

//重写init方法

- (instancetype)init{

    if (self = [super init]) {

    //存在沙盒中的路径

        self.filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject] stringByAppendingPathComponent:@"person.sqlite"];

        [self checkSQLiteWithPath:_filePath];

    }

    return self;

}

//判断文件夹路径下, sqlite路径是否存在

- (void)checkSQLiteWithPath:(NSString *)path{

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if ([fileManager fileExistsAtPath:path]) {

        //暂时不做处理

    }else{

      //将工程中的 SQLite 文件拷贝进沙盒里面, 用来存储数据

        //1.工程中 SQLite 路径

        NSString *boundPath = [[NSBundle mainBundle] pathForResource:@"Person" ofType:@"sqlite"];

        if (boundPath.length == 0) {

            NSLog(@"工程中的 SQLite 文件不存在, 请重新引入");

            abort();

        }

       BOOL result = [fileManager copyItemAtPath:boundPath toPath:path error:nil];

        result?NSLog(@"拷贝成功"):NSLog(@"拷贝失败");

    }

    //初始化opeQueue

    //操作沙盒中的数据库文件

    self.openQueue = [FMDatabaseQueue databaseQueueWithPath:path];

}

 
对数据进行操作, 例如添加数据, 查询数据, 删除数据, 修改数据和删除数据库等操作.
在.h中写方法的声明

#import <Foundation/Foundation.h>

@class Person;

@interface DBManager : NSObject

//单例初始化方法

+ (DBManager *)sharedDBManager;

- (void)insertData:(Person *)person;

- (NSArray *)selectData;

- (void)deleteData:(NSString *)name;

- (void)updateDataWithName:(NSString *)name :(NSString *)gender;

- (void)removeDataBase;

@end

 在.m中实现方法

#import "DBManager.h"

#import "FMDB.h"

#import "Person.h"

@interface DBManager()

@property(nonatomic, strong)FMDatabaseQueue *openQueue;

@property(nonatomic, copy)NSString *filePath;

@end

@implementation DBManager

+ (DBManager *)sharedDBManager{

    static DBManager *dbManager = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        dbManager = [[DBManager alloc] init];

    });

    return dbManager;

}

//重写init方法

- (instancetype)init{

    if (self = [super init]) {

    //存在沙盒中的路径

        self.filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject] stringByAppendingPathComponent:@"person.sqlite"];

        [self checkSQLiteWithPath:_filePath];

    }

    return self;

}

//判断文件夹路径下, sqlite路径是否存在

- (void)checkSQLiteWithPath:(NSString *)path{

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if ([fileManager fileExistsAtPath:path]) {

        //暂时不做处理

    }else{

      //将工程中的 SQLite 文件拷贝进沙盒里面, 用来存储数据

        //1.工程中 SQLite 路径

        NSString *boundPath = [[NSBundle mainBundle] pathForResource:@"Person" ofType:@"sqlite"];

        if (boundPath.length == 0) {

            NSLog(@"工程中的 SQLite 文件不存在, 请重新引入");

            abort();

        }

       BOOL result = [fileManager copyItemAtPath:boundPath toPath:path error:nil];

        result?NSLog(@"拷贝成功"):NSLog(@"拷贝失败");

    }

    //初始化opeQueue

    //操作沙盒中的数据库文件

    self.openQueue = [FMDatabaseQueue databaseQueueWithPath:path];

}

- (void)insertData:(Person *)person{

    [self.openQueue inDatabase:^(FMDatabase *db) {

        [db open];

       BOOL result = [db executeUpdate:@"insert into PersonTable(name, gender, age) values (?, ?, ?)", person.name, person.gender, @(person.age)];

        result?NSLog(@"添加数据成功"):NSLog(@"添加数据失败");

        [db close];

    }];

}

- (NSArray *)selectData{

    NSMutableArray *perArr = [@[] mutableCopy];

    [self.openQueue inDatabase:^(FMDatabase *db) {

        [db open];

        FMResultSet *result = [db executeQuery:@"select * from PersonTable"];

        while ([result next]) {

            NSString *name = [result stringForColumn:@"name"];

            NSString *gender = [result stringForColumn:@"gender"];

            NSInteger age = [result intForColumn:@"age"];

            Person *person = [Person personWithName:name gender:gender age:age];

            [perArr addObject:person];

        }

        [db close];

    }];

    return perArr;

}

- (void)deleteData:(NSString *)name{

    [self.openQueue inDatabase:^(FMDatabase *db) {

        [db open];

        BOOL result = [db executeUpdate:@"delete from PersonTable where name = ?", name];

        result ?NSLog(@"删除数据成功"):NSLog(@"删除数据失败");

        [db close];

    }];

}

- (void)updateDataWithName:(NSString *)name :(NSString *)gender{

    [self.openQueue inDatabase:^(FMDatabase *db) {

        [db open];

        BOOL result = [db executeUpdate:@"update PersonTable set name = ? where gender = ?", name, gender];

        result ?NSLog(@"更新数据成功"):NSLog(@"更新数据失败");

        [db close];

    }];

}

- (void)removeDataBase{

    NSFileManager *fileManager = [NSFileManager defaultManager];

    BOOL result = [fileManager removeItemAtPath:self.filePath error:nil];

    result ? NSLog(@"删除数据库成功"):NSLog(@"删除数据库失败");

}

@end

 

FMDB的使用方法

原文:http://www.cnblogs.com/YhhMzl/p/5046872.html

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