封裝的數(shù)據(jù)庫操作

可以進(jìn)行數(shù)據(jù)庫建表棍弄,以及增刪改査等操作

使用前需要導(dǎo)入sqlite3數(shù)據(jù)庫包

SandBoxPath.h

#import <Foundation/Foundation.h>

@interface SandBoxPath : NSObject

//沙盒的主路徑
+ (NSString *)homePath;
//沙盒中Documents路徑
+ (NSString *)documents;
//沙盒中l(wèi)ibraray路徑
+ (NSString *)library;
//libraryCaches路徑
+ (NSString *)libraryCaches;
//temp路徑
+ (NSString *)temp;

@end

SandBoxPath.m

#import "SandBoxPath.h"

@implementation SandBoxPath

//得到沙盒主目錄
+ (NSString *)homePath
{
    return  NSHomeDirectory();
}

//得到Documents文件夾目錄
+ (NSString *)documents
{
    return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
}

//得到Library文件夾目錄
+ (NSString *)library
{
    return NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
}

//得到caches文件夾
+ (NSString *)libraryCaches
{
    return NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
}

//得到tem文件夾
+ (NSString *)temp
{
    return NSTemporaryDirectory();
}
@end

DataBaseHelper.h

#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface DataBaseHelper : NSObject

+ (instancetype)sharedDatabaseHelper;

//創(chuàng)建數(shù)據(jù)庫文件路徑
- (void)dbFilePathWithFileName: (NSString *)fileName;

//除了查詢語句以外的所有語句
- (void)operationSQLWithSqlString: (NSString *)sqlstr;

//查詢語句
- (NSArray *)queryDataWithSqlstring: (NSString *)sqlString;
@end

DataBaseHelper.m

#import "DataBaseHelper.h"
#import "SandBoxPath.h"

@interface DataBaseHelper ()

@property (nonatomic,retain) NSString *fileName;

@end

@implementation DataBaseHelper

+ (instancetype)sharedDatabaseHelper
{
    static DataBaseHelper *dataBaseHelper = nil;
    @synchronized(self) {
        if (!dataBaseHelper) {
            dataBaseHelper = [[DataBaseHelper alloc] init];
        }
        
        return dataBaseHelper;
    }  
}

//創(chuàng)建數(shù)據(jù)庫文件路徑
- (void)dbFilePathWithFileName: (NSString *)fileName
{
    //得到沙盒的documents路徑
    NSString *docuPath = [SandBoxPath documents];
    //判斷文件名是否帶后綴,如果有直接使用,如果沒有例隆,內(nèi)部為它拼接
    if (![fileName containsString:@".sqlite"])
    {
        fileName = [fileName stringByAppendingString:@".sqlite"];
    }
    
    self.fileName = [docuPath
                     stringByAppendingPathComponent:fileName];
}

//打開或者創(chuàng)建數(shù)據(jù)庫
- (sqlite3 *)openOrCreateDB
{
    sqlite3 *sqlDB = NULL;
    //打開數(shù)據(jù)庫
    int result = sqlite3_open(self.fileName.UTF8String, &sqlDB);
    if (result == SQLITE_OK) {
        NSLog(@"數(shù)據(jù)庫打開成功");
        return sqlDB;
    }
    else
    {
        NSLog(@"數(shù)據(jù)庫打開失敗");
        return NULL;
    }
}

//除了查詢操作憔维,其他操作所執(zhí)行的方法
- (void)operationSQLWithSqlString: (NSString *)sqlstr
{
    sqlite3 *sqlDB = [self openOrCreateDB];
    int result = sqlite3_exec(sqlDB, sqlstr.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        
        NSLog(@"語句執(zhí)行成功");
        //每次執(zhí)行完成之后微姊,需要關(guān)閉數(shù)據(jù)庫
        sqlite3_close(sqlDB);
        NSLog(@"%@",self.fileName);
    }
    else
    {
        NSLog(@"語句執(zhí)行失敗");
        //每次執(zhí)行完成之后航攒,需要關(guān)閉數(shù)據(jù)庫
        sqlite3_close(sqlDB);
    }
}

//數(shù)據(jù)庫查詢,通用
- (NSArray *)queryDataWithSqlstring: (NSString *)sqlString
{
    //初始化可變數(shù)據(jù)让簿,用來盛放所有記錄
    NSMutableArray *resultArray = [[NSMutableArray alloc] init];
    //打開數(shù)據(jù)庫
    sqlite3 *sqlDB = [self openOrCreateDB];
    //聲明stmt指針敬察,一會(huì)用來盛放
    sqlite3_stmt *stament = NULL;
    int result = sqlite3_prepare(sqlDB, sqlString.UTF8String, -1, &stament, NULL);
    if (result == SQLITE_OK) {
        //沒執(zhí)行一次step函數(shù),stament中就會(huì)完整的保存一條記錄
        while (sqlite3_step(stament) == SQLITE_ROW) {
            //確定該表有幾個(gè)字段拜英,其實(shí)就是有幾列
            int columnCount = sqlite3_column_count(stament);
            
            NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
            //遍歷所有的列
            for (int i = 0; i < columnCount; i++) {
                int type = sqlite3_column_type(stament, i);
                //得到字段名稱
                const char *attName = sqlite3_column_name(stament, i);
                NSString *keyString = [NSString stringWithCString:attName encoding:NSUTF8StringEncoding];
                switch (type) {
                    case SQLITE_INTEGER:
                        {
                            int value = sqlite3_column_int(stament,i);
                            [mDict setObject:[NSNumber numberWithInt:value] forKey:keyString];
                        }
                        break;
                    case SQLITE_TEXT:
                        {
                            NSString *valueString = [NSString stringWithCString:(const char *)sqlite3_column_text(stament, i) encoding:NSUTF8StringEncoding];
                            [mDict setObject:valueString forKey:keyString];
                        }
                        break;
                    case SQLITE_FLOAT:
                        {
                            float value = sqlite3_column_int(stament,i);
                            [mDict setObject:[NSNumber numberWithFloat:value] forKey:keyString];
                        }
                        break;
                    default:
                        break;
                }
            }
            [resultArray addObject:mDict];
        }
    }
    
    sqlite3_close(sqlDB);
    sqlite3_finalize(stament);
    
    return resultArray;
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末静汤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虫给,老刑警劉巖藤抡,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抹估,居然都是意外死亡缠黍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門药蜻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓷式,“玉大人,你說我怎么就攤上這事语泽∶车洌” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵踱卵,是天一觀的道長(zhǎng)廊驼。 經(jīng)常有香客問我,道長(zhǎng)惋砂,這世上最難降的妖魔是什么妒挎? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮西饵,結(jié)果婚禮上酝掩,老公的妹妹穿的比我還像新娘。我一直安慰自己眷柔,他們只是感情好期虾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著闯割,像睡著了一般彻消。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宙拉,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音丙笋,去河邊找鬼谢澈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛御板,可吹牛的內(nèi)容都是我干的锥忿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼怠肋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼敬鬓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤钉答,失蹤者是張志新(化名)和其女友劉穎础芍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體数尿,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仑性,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了右蹦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊杆。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖何陆,靈堂內(nèi)的尸體忽然破棺而出晨汹,到底是詐尸還是另有隱情,我是刑警寧澤贷盲,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布宰缤,位于F島的核電站,受9級(jí)特大地震影響晃洒,放射性物質(zhì)發(fā)生泄漏慨灭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一球及、第九天 我趴在偏房一處隱蔽的房頂上張望氧骤。 院中可真熱鬧,春花似錦吃引、人聲如沸筹陵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朦佩。三九已至,卻和暖如春庐氮,著一層夾襖步出監(jiān)牢的瞬間语稠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工弄砍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仙畦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓音婶,卻偏偏與公主長(zhǎng)得像慨畸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衣式,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容