fmdb是轻量级的数据库。在ios中使用十分常见,总结一下fmdb的使用
首先 我用cocoapods 在GitHub上download下来
pod 'FMDB', '~> 2.5'
当然也可以将他下载下来 copy
进工程 但是此处必须要导入他所需要的类库libsqlite3.0.dylib
让我们新建一个类 继承于NSObject
这个类 就是我们通常所说的单例 引入头文件 #import "FMDB.h" (此处操作在.h 中声明)
+ (FMDatabase *)shareDataBase;
在.m 中实现
//此处有俩种初始化方法,一种是通常的初始化 ,另一种是多线程初始化
// 单例初始化
+ (FMDatabase *)shareDataBase
{
static FMDatabase *db = nil;
if (db == nil) {
NSString *fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/contacts.sqlite"];
db = [[FMDatabase alloc]initWithPath:fullPath];
NSLog(@"fullPath-->%@", fullPath);
}
return db;
}
//使用GCD初始化
+ (FMDatabase *)shareDataBase
{
static dispatch_once_t predicate;
static FMDatabase *db = nil;
dispatch_once(&predicate, ^{
NSString *fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/contacts.sqlite"];
db = [[FMDatabase alloc]initWithPath:fullPath];
});
return db;
}
到此 单例已经完毕
接下来 我们使用他来 做一些事情
假如 我们要在数据库中存入姓名和 学号
//首先 我们先建立一个存放姓名和学号的数组
+ (NSMutableArray *)queryData;
//我们在数据库里面 增加表
+ (BOOL)insertData:(Contact *)contact;
//我们删除表
+ (BOOL)deleteData:(int)contactID;
//我们修改表
+ (BOOL)updateData:(Contact *)contact;
同样 我们在.m实现这些方法
/*
* 建立存放数据的数组 返回 数组
*/
+ (NSMutableArray *)queryData
{
NSMutableArray *array = [[NSMutableArray alloc]init];
FMDatabase *db = [DatabaseUtil shareDataBase];
if (![db open]) {
[db close];
return nil;
}
[db setShouldCacheStatements:YES];
FMResultSet *rs = [db executeQuery:@"SELECT * FROM contacts"];
while ([rs next]) {
Contact *contact = [[Contact alloc]init];
contact.contactID = [rs intForColumn:@"contact_id"];
contact.name = [rs stringForColumn:@"contact_name"];
contact.number = [rs stringForColumn:@"contact_number"];
[array addObject:contact];
}
[rs close];
[db close];
return array;
}
/*
* 增加表 判断结果 返回结果
*/
+ (BOOL)insertData:(Contact *)contact
{
BOOL result = NO;
FMDatabase *db = [DatabaseUtil shareDataBase];
if (![db open]) {
[db close];
return NO;
}
[db setShouldCacheStatements:YES];
if ([db tableExists:@"contacts"]) {
result = YES;
}else{
if ([db executeUpdate:@"CREATE TABLE contacts(contact_id INTEGER PRIMARY KEY, contact_name TEXT, contact_number TEXT NOT NULL)"]) {
result = YES;
}
}
if ([db executeUpdate:@"INSERT INTO contacts(contact_name,contact_number) VALUES (?,?)",contact.name,contact.number]) {
result = YES;
}
[db close];
return result;
}
/*
* 删除表 判断结果 返回结果
*/
+ (BOOL)deleteData:(int)contactID
{
BOOL result = NO;
FMDatabase *db = [DatabaseUtil shareDataBase];
if (![db open]) {
[db close];
return NO;
}
[db setShouldCacheStatements:YES];
if ([db executeUpdate:@"DELETE FROM contacts WHERE contacts.contact_id = (?)", @(contactID)]) {
return YES;
}
[db close];
return result;
}
/*
* 修改表 判断结果 返回结果
*/
+ (BOOL)updateData:(Contact *)contact
{
BOOL result = NO;
FMDatabase *db = [DatabaseUtil shareDataBase];
if (![db open]) {
[db close];
return NO;
}
[db setShouldCacheStatements:YES];
if ([db executeUpdate:@"UPDATE contacts SET contact_name = (?),contact_number = (?) WHERE contact_id = (?)",contact.name,contact.number,@(contact.contactID)]) {
NSLog(@"%d-%@-%@",contact.contactID,contact.name,contact.number);
result = YES;
}
[db close];
return result;
}
到此 我们一个轻量级的数据库 就建立完成了 只需要使用的时候调用他就可以!!!
以上 就是 个人 对FMDB的小小封装 具体哪里有什么问题 希望各位可以指出 O(∩_∩)O谢谢!!!