SQLITE 基本函數(shù)的封裝

// 先引入 libsqlite3.0 關(guān)系型數(shù)據(jù)庫(kù)

#import<Foundation/Foundation.h>

#import@interface DataBaseHelper : NSObject

// 查詢(xún) sql 語(yǔ)句

- (NSArray *) queryWithSql:(NSString *)sql;

// 執(zhí)行處查詢(xún)外的 sql 語(yǔ)句 (delete,update,insert into)

-(BOOL) excuteNoResultSetWithSql:(NSString *)sql operation:(NSString *) operStr;

// 為庫(kù)文件命名

- (void) creatDBPathWithFileName:(NSString *)fileName;

// 單例對(duì)象

+ (DataBaseHelper *) sharedDatanaseHelper;

@end

#import<Foundation/Foundation.h>

#import "DataBaseHelper.h"

#import<sqlite3.h>

@interface DataBaseHelper ()

{

sqlite3 *sqliteDB;

}

@property (nonatomic, copy) NSString *dbPath; // 數(shù)據(jù)庫(kù)文件路徑

@end

@implementation DataBaseHelper

// 單列

+ (DataBaseHelper *) sharedDatanaseHelper{

static DataBaseHelper *databaseHelper = nil;

if (databaseHelper == nil) {

databaseHelper = [[DataBaseHelper alloc]init];

}

return databaseHelper;

}

// 創(chuàng)建數(shù)據(jù)庫(kù)路徑

- (void) creatDBPathWithFileName:(NSString *)fileName{

NSString *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

if (![fileName containsString:@".sqlite"]) {

fileName = [fileName stringByAppendingString:@".sqlite"];

}

self.dbPath = [documents stringByAppendingPathComponent:fileName];

}

// 創(chuàng)建或打開(kāi)數(shù)據(jù)庫(kù)

- (sqlite3 *) creatOrOpenDatabase{

int result = sqlite3_open(self.dbPath.UTF8String, &sqliteDB);

if (result == SQLITE_OK) {

NSLog(@"數(shù)據(jù)庫(kù)創(chuàng)建成功");

return sqliteDB;

}else{

NSLog(@"數(shù)據(jù)庫(kù)創(chuàng)建失敗 ---- %d",result);

return NULL;

}

}

// 執(zhí)行無(wú)返回值的操作

-(BOOL) excuteNoResultSetWithSql:(NSString *)sql operation:(NSString *) operStr{

// 打開(kāi)數(shù)據(jù)庫(kù)

sqlite3 *dbHandle = [self creatOrOpenDatabase];

// 執(zhí)行 sql語(yǔ)句

int result = sqlite3_exec(dbHandle, sql.UTF8String, NULL, NULL, NULL);

// 關(guān)閉數(shù)據(jù)庫(kù)

sqlite3_close(dbHandle);

// 判斷 sql 語(yǔ)句的是否執(zhí)行成功

if (result == SQLITE_OK) {

NSLog(@"%@執(zhí)行語(yǔ)句成功",operStr);

return YES;

}else{

NSLog(@"%@執(zhí)行 sql語(yǔ)句失敗--- %d",operStr,result);

return? NO;

}

}

// 執(zhí)行有返回值的 查詢(xún)操作

- (NSArray *) queryWithSql:(NSString *)sql{

// 打開(kāi)數(shù)據(jù)庫(kù)

sqlite3 *dbHandle = [self creatOrOpenDatabase];

// 聲明伴隨指針

sqlite3_stmt *stament = NULL;

// 準(zhǔn)備 sql 語(yǔ)句

int result = sqlite3_prepare(dbHandle, sql.UTF8String, -1, &stament, NULL);

// 初始化數(shù)組

NSMutableArray *allResultArr = [NSMutableArray array];

// 判斷 sql語(yǔ)句是否正確

if (result == SQLITE_OK) {

// 取出每一條記錄

while (sqlite3_step(stament) == SQLITE_ROW) {

// 獲得列個(gè)數(shù)

int sumCol = sqlite3_column_count(stament);

// 初始化字典

NSMutableDictionary *bdDic = [NSMutableDictionary dictionary];

// 遍歷每一列

for (int i = 0 ; i < sumCol; i++) {

// 獲得字段類(lèi)型

int typeCol = sqlite3_column_type(stament, i);

// 獲得字段名

const char *nameCol = sqlite3_column_name(stament, i);

NSString *key = [NSString stringWithUTF8String:nameCol];

// 判斷當(dāng)前列的類(lèi)型存儲(chǔ)到字典中

switch (typeCol) {

case SQLITE_INTEGER:{

int value = sqlite3_column_int(stament, i);

[bdDic setObject:[NSNumber numberWithInt:value] forKey:key];

}

break;

case SQLITE_TEXT:{

const unsigned char *value = sqlite3_column_text(stament, i);

NSString *valueStr = [NSString stringWithUTF8String:(const char *)value];

[bdDic setObject:valueStr forKey:key];

}

break;

default:

break;

}

}

[allResultArr addObject:bdDic];

}

}else{

NSLog(@"查詢(xún)有誤 ----- %d",result);

}

// 釋放資源,返回?cái)?shù)組

sqlite3_finalize(stament);

sqlite3_close(dbHandle);

return allResultArr;

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 使用的過(guò)程根據(jù)使用的函數(shù)大致分為如下幾個(gè)過(guò)程: sqlite3_open() sqlite3_prepare() ...
    隨風(fēng)飄蕩的小逗逼閱讀 6,876評(píng)論 0 3
  • 什么是SQLite?數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的步驟 ●SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù),它占用資源非常的低,在嵌入式設(shè)備...
    飛行的貓閱讀 2,604評(píng)論 1 7
  • iOS開(kāi)發(fā)數(shù)據(jù)庫(kù)篇—SQLite常用的函數(shù) 一、簡(jiǎn)單說(shuō)明 1.打開(kāi)數(shù)據(jù)庫(kù) int sqlite3_open( co...
    143db5b5572a閱讀 1,188評(píng)論 0 0
  • SQLite SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù),它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠...
    Mark_Guan閱讀 1,460評(píng)論 1 11
  • 1 別看我年紀(jì)輕輕,已經(jīng)在用幾十萬(wàn)的車(chē)了。 是輛啥車(chē)? 購(gòu)物車(chē)。 我覺(jué)得雙11最該打折的,是你的手。 去年過(guò)完雙十...
    脫口岳閱讀 406評(píng)論 0 0

友情鏈接更多精彩內(nèi)容