oc中数据库使用详细解释(一)

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



posted @ 2013-12-28 15:13  徐坤很无聊  阅读(416)  评论(0编辑  收藏  举报