////以下为定义为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; }