iOS學習——數(shù)據(jù)庫操作(SQLite)

SQLite (http://www.sqlite.org/docs.html) 是一個輕量級的關(guān)系數(shù)據(jù)庫。SQLite最初的設計目標是用于嵌入式系統(tǒng),它占用資源非常少,在嵌入式設備中,只需要幾百K的內(nèi)存就夠了,目前應用于Android、iOS、Windows Phone等智能手機。iOS 使用時SQLite,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 頭文件即可。

在這里我還是要推薦下我自己建的iOS開發(fā)學習群:680565220,群里都是學ios開發(fā)的,如果你正在學習ios ,小編歡迎你加入,今天分享的這個案例已經(jīng)上傳到群文件,大家都是軟件開發(fā)黨,不定期分享干貨(只有iOS軟件開發(fā)相關(guān)的),包括我自己整理的一份2018最新的iOS進階資料和高級開發(fā)教程

? ? ? ? ? 數(shù)據(jù)庫操作包含打開數(shù)據(jù)庫、創(chuàng)建表,表的增、刪、改、查。下面代碼給出了數(shù)據(jù)庫操作。

? ? ? ? ?創(chuàng)建并打開數(shù)據(jù)庫:

[cpp]?view plain?copy

-(BOOL)?openDB{??

//獲取數(shù)據(jù)庫路徑??

????NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);??

????NSString?*documents?=?[paths?objectAtIndex:0];??

????NSString?*database_path?=?[documents?stringByAppendingPathComponent:DBNAME];??


//如果數(shù)據(jù)庫存在,則用sqlite3_open直接打開(不要擔心,如果數(shù)據(jù)庫不存在sqlite3_open會自動創(chuàng)建)??

//打開數(shù)據(jù)庫,這里的[path?UTF8String]是將NSString轉(zhuǎn)換為C字符串,因為SQLite3是采用可移植的C(而不是??

//Objective-C)編寫的,它不知道什么是NSString.??

if?(sqlite3_open([database_path?UTF8String],?&db)?==?SQLITE_OK)?{??

return?YES;??

}else{??

return?NO;??

NSLog(@"數(shù)據(jù)庫打開失敗");??

????????sqlite3_close(db);??

????}??

}??

? ? ? ? ?iOS中沒有提供創(chuàng)建數(shù)據(jù)庫的命令,當使用sqlite3_open時,如果數(shù)據(jù)庫文件不存在會自行創(chuàng)建數(shù)據(jù)庫,如果存在會打開數(shù)據(jù)庫。打開數(shù)據(jù)庫后就可以創(chuàng)建表并操作表內(nèi)容了,iOS中的sqlite3使用sqlite3_exec來創(chuàng)建表、插入表內(nèi)容、修改表內(nèi)容、刪除表內(nèi)容等操作,使用sqlite3_prepare_v2來查詢表。下面給給出了sqlite3_exec的封裝:

[cpp]?view plain?copy

-(void)execSql:(NSString?*)sql??

{??????

if?([self?openDB])?{??

char?*err;??

if?(sqlite3_exec(db,?[sql?UTF8String],?NULL,?NULL,?&err)?!=?SQLITE_OK)?{??

NSLog(@"數(shù)據(jù)庫操作數(shù)據(jù)失敗!");??

}else{??

NSLog(@"%@",sql);??

????????}??

????????sqlite3_close(db);??

????}??????

}??

? ? ? ? 創(chuàng)建表:

[cpp]?view plain?copy

NSString?*sqlCreateTable?=??[NSString?stringWithFormat:@"CREATE?TABLE?IF?NOT?EXISTS?'%@'?('%@'?INTEGER?PRIMARY?KEY?AUTOINCREMENT,?'%@'?TEXT,?'%@'?INTEGER,?'%@'?TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS];??

????[self?execSql:sqlCreateTable];??

? ? ? ? 插入數(shù)據(jù):

[cpp]?view plain?copy

-(void)?insertData{??

????NSString?*insertSql1=?[NSString?stringWithFormat:??

@"INSERT?INTO?'%@'?('%@',?'%@',?'%@')?VALUES?('%@',?'%@',?'%@')",??

TABLENAME,?NAME,?AGE,?ADDRESS,?@"張三",?@"13",?@"濟南"];??

????[self?execSql:insertSql1];??


????NSString?*insertSql2?=?[NSString?stringWithFormat:??

@"INSERT?INTO?'%@'?('%@',?'%@',?'%@')?VALUES?('%@',?'%@',?'%@')",??

TABLENAME,?NAME,?AGE,?ADDRESS,?@"李四",?@"12",?@"濟南"];??

????[self?execSql:insertSql2];??


}??

? ? ? ? ?修改表:

[cpp]?view plain?copy

-(void)?updateData{??

????NSString?*updateSql?=?[NSString?stringWithFormat:??

@"UPDATE?'%@'?SET?'%@'?=?'%@'?WHERE?'%@'?=?'%@'",??

TABLENAME,???AGE,??@"15"?,AGE,??@"13"];??

????[self?execSql:updateSql];??

}??

? ? ? ? ?刪除表內(nèi)容:

[cpp]?view plain?copy

-(void)?deleteData{??

????NSString?*sdeleteSql?=?[NSString?stringWithFormat:??

@"delete?from?%@?where?%@?=?'%@'",??

TABLENAME,?NAME,?@"張三"];??

????[self?execSql:sdeleteSql];??

}??

上面實現(xiàn)了表內(nèi)容的增、改、刪,下面實現(xiàn)表內(nèi)容查詢。

[cpp]?view plain?copy

-(void)?selectData{??


????[self?openDB];??

????NSString?*sqlQuery?=?[NSString?stringWithFormat:??

@"SELECT?*?FROM?%@",TABLENAME];??

????sqlite3_stmt?*?statement;??


if?(sqlite3_prepare_v2(db,?[sqlQuery?UTF8String],?-1,?&statement,?nil)?==?SQLITE_OK)?{??


//查詢結(jié)果集中一條一條的遍歷所有的記錄,這里的數(shù)字對應的是列值,注意這里的列值??


while?(sqlite3_step(statement)?==?SQLITE_ROW)?{??

char?*name?=?(char*)sqlite3_column_text(statement,?1);??

????????????NSString?*nsNameStr?=?[[NSString?alloc]initWithUTF8String:name];??


int?age?=?sqlite3_column_int(statement,?2);??


char?*address?=?(char*)sqlite3_column_text(statement,?3);??

????????????NSString?*nsAddressStr?=?[[NSString?alloc]initWithUTF8String:address];??


NSLog(@"name:%@??age:%d??address:%@",nsNameStr,age,?nsAddressStr);??

????????}??

}else{??

NSLog(@"select?error:%@",sqlQuery);??


????}??

????sqlite3_close(db);??

}??

好了,這就是全部了,iOS中數(shù)據(jù)庫操作的類封裝的并不太好用,希望大家盡量封裝自己的類,。

Demo下載

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

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

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