一、IOS開發中支持sqlite3輕量級數據庫
在使用數據庫之前,需要導入數據庫相關的包。
在這裏,我們封裝一個數據庫對象來操作數據庫:
創建單例:
//單例
+(DataBaseHelper *)ShareSingleton{
static DataBaseHelper* dataBaseHelper = nil;
@synchronized(self) {
if (dataBaseHelper == nil) {
dataBaseHelper = [[DataBaseHelper alloc]init];
}
}
return dataBaseHelper;
}
//創建數據庫路徑
-(void)dataBasePathWithName:(NSString*)fileName{
//首先判斷文件是否包含後綴名
if (![fileName containsString:@".sqlite"]) {
fileName = [fileName stringByAppendingString:@".sqlite"];
}
//拼接完整的數據庫路徑
self.fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fileName];
}
//創建數據庫
-(sqlite3*)openOrCreateDB{
/*//存儲路徑
NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"db.sqlite"];*/
//創建數據庫指針
sqlite3* sqlite = nil;
//打開數據庫
int isOpen = sqlite3_open(self.fileName.UTF8String, &sqlite);
//判斷 是否打開成功
if (isOpen == SQLITE_OK) {
NSLog(@"打開成功");
return sqlite;
}else{
NSLog(@"打開失敗");
return NULL;
}
}
//執行無返回結果的操作
- (void)execSqlWithSQLString:(NSString*)SQLString message:(NSString*)message{
//打開數據庫
sqlite3* sqlite = [self openOrCreateDB];
//執行語句
int isSuccessful = sqlite3_exec(sqlite, SQLString.UTF8String, NULL, NULL, NULL);
//執行信息
if (isSuccessful == SQLITE_OK) {
NSLog(@"執行成功:%@ is successful",message);
}else{
NSLog(@"執行失敗:%@ is fail",message);
}
//關閉數據庫
sqlite3_close(sqlite);
}
//通用的查詢方法
-(NSArray*)querywithSQL:(NSString*)sqlStr{
//打開數據庫
sqlite3 *sqlite = [self openOrCreateDB];
//聲明stmt指針
sqlite3_stmt *stament;
//初始化可變數據,用來盛放所有記錄
NSMutableArray* array = [[NSMutableArray alloc]init];
int result = sqlite3_prepare_v2(sqlite, sqlStr.UTF8String, -1, &stament, NULL);
if (result == SQLITE_OK) {
//遍歷沒一條執行信息,並存儲
while (sqlite3_step(stament) == SQLITE_ROW) {
//動態獲得記錄的字段數
int count = sqlite3_column_count(stament);
//存放數據信息
NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
for (int i = 0 ; i < count ; i ++) {
//確定該字段的類型
int type = sqlite3_column_type(stament, i);
//確定該字段的關鍵字
const char *name = sqlite3_column_name(stament, i);
NSString *key = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
//根據類型取值
switch (type) {
case SQLITE_TEXT:
{//string
NSString* str = [NSString stringWithCString:(const char*)sqlite3_column_text(stament, i) encoding:NSUTF8StringEncoding];
[mDic setObject:str forKey:key];
}
break;
case SQLITE_INTEGER:
{//int
NSInteger value = sqlite3_column_int(stament, i);
[mDic setObject:@(value) forKey:key];
}
break;
case SQLITE_BLOB:
{
}
break;
default:
break;
}
}
//將記錄添加到數組-
[array addObject:mDic];
}
//關閉數據庫,釋放資源
sqlite3_close(sqlite);
//釋放指針
sqlite3_finalize(stament);
//返回該值
return array;
}else{
NSLog(@"查詢語句有問題");
//關閉數據庫,釋放資源
sqlite3_close(sqlite);
//釋放指針
sqlite3_finalize(stament);
return array;
}
}