1.建表
#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];
}
#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
原文:http://www.cnblogs.com/YhhMzl/p/5046872.html