以下为定义为DB.h的单例.继承自NSObject,引入sqlite3头文件.引入前请在框架Framework中引入sqlite3.0的框架
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DB : NSObject
//打开数据库,并返回数据库的指针
+ (sqlite3 *)open;
//关闭数据库
+ (void)close;
@end
#import "DB.h"
@implementation DB
//实际开发中 对数据库的操作会比较多,为了避免不停的打开和关闭数据库, 我们把数据库指针做成单例,如果单例有值,直接返回,如果单例没值,创建一个。
#define kSQLFileName @"StudentManage.sqlite"
static sqlite3 *db = nil;
+ (sqlite3 *)open
{
if (db != nil) {//如果数据库已经打开,无需再次打开
return db;
}
//Documents文件夹路径
//如果数据库在docments文件下还没有创建.
//第一步先通过NSSearchPathForDirectoriesInDomains找到docments文件夹路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
//数据库文件 路径
NSString *sqlFilePath = [docPath stringByAppendingPathComponent:kSQLFileName];
NSLog(@"%@",sqlFilePath);
//NSFileManager 类型的实例对象.用来检测给定路径有木有文件
NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:sqlFilePath] == NO) {//如果给定的路径没有文件
NSString *bundleSQLFilePath = [[NSBundle mainBundle] pathForResource:kSQLFileName ofType:nil];
//把包里面的数据库文件 拷贝到 Documents下
[fm copyItemAtPath:bundleSQLFilePath toPath:sqlFilePath error:nil];
}
sqlite3_open([sqlFilePath UTF8String], &db);
return db;
}
+ (void)close
{
sqlite3_close(db);
db = nil;
}