iOS開發資料儲存篇—libsqlite3和FMDB的基本使用和區別
一、簡要介紹
libsqlite3是IOS中純C語言操作Sqlite資料庫的一個庫檔案。使用起來和OC面向物件的方式有點彆扭,不是特別的方便。
FMDB是IOS平臺的SQLite資料庫框架,以OC的方式封裝了SQLite的C語言的API。FMDB使用起來更加的面向物件,省去了很多麻煩、冗餘的C語言程式碼,對比蘋果自帶的Core Data框架,更加的輕量級和靈活。提供了多執行緒安全的資料庫操作的方法,有效的防止資料混亂。開源地址為ofollow,noindex">https://github.com/ccgus/fmdb 。
這是一個我的iOS交流群:624212887,群檔案自行下載,不管你是小白還是大牛熱烈歡迎進群 ,分享面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。——點選:加入
如果覺得對你還有些用,就關注小編+喜歡這一篇文章。你的支援是我繼續的動力。
下篇文章預告:NSNotificationCenter使用小結
文章來源於網路,如有侵權,請聯絡小編刪除。
下面我們就對比他們兩者的使用,好壞優劣立馬就可以分曉。
二、基本使用和對比
2.0、資料庫操作物件
C語言方式:
sqlite3 *_db;
FMDB方式:
FMDatabase *db;
2.1、開啟資料庫
C語言方式:
- (void)openDB{ //獲取資料庫檔案路徑 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"]; //將OC字串轉換為c語言的字串 const char *cfileName = fileName.UTF8String; //開啟資料庫檔案(如果資料庫檔案不存在,那麼該函式會自動建立資料庫檔案) int result = sqlite3_open(cfileName, &_db); if (result == SQLITE_OK) {//開啟成功 NSLog(@"成功開啟資料庫"); }else{ NSLog(@"開啟資料庫失敗"); } }
FMDB方式:
- (void)openDB{ //1、獲取資料庫檔案路徑 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"]; //2、獲取資料庫連線 _db = [FMDatabase databaseWithPath:fileName]; //3、開啟資料庫連線 if ([_db open]) { NSLog(@"開啟資料庫成功"); }else{ NSLog(@"開啟資料庫失敗"); } }
2.2、建立表格
C語言方式:
- (void)createTable{ //建立表 const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);"; char *errmsg= NULL; int result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg); if (result==SQLITE_OK) { NSLog(@"建立表成功"); }else{ NSLog(@"建立表失敗---%s",errmsg); } }
FMDB方式:
- (void)createTable{ BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"]; if (result) { NSLog(@"建立表格成功"); }else{ NSLog(@"建立表格失敗"); } }
2.3、插入資料
C語言方式:
- (void)insertData{ //插入資料 for (int i=0; i<10; i++) { //拼接sql語句 NSString *name = [NSString stringWithFormat:@"yixiangboy--%d",arc4random_uniform(100)]; int age = arc4random_uniform(20)+10; NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,age) VALUES ('%@',%d);",name,age]; //執行SQL語句 char *errmsg = NULL; sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) {//如果有錯誤資訊 NSLog(@"插入資料失敗--%s",errmsg); }else{ NSLog(@"插入資料成功"); } } }
FMDB方式:
- (void)insertData{ for (int i=0; i<10; i++) { NSString *name = [NSString stringWithFormat:@"yixiang-%d",arc4random_uniform(100)]; int age = arc4random_uniform(20)+10; BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(age)]; if (result) { NSLog(@"插入成功"); }else{ NSLog(@"插入失敗"); } } }
2.4、刪除資料
C語言方式:
- (void)deleteData{ //刪除age小於15的資料 NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_student WHERE age<15"]; char *errmsg = NULL; sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"刪除資料失敗"); }else{ NSLog(@"刪除資料成功"); } }
2.5、更新資料
C語言方式:
- (void)updateData{ //大於20歲的都置為20歲 NSString *sql = [NSString stringWithFormat:@"UPDATE t_student set age=20 WHERE age>20"]; char *errmsg = NULL; sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"更新資料失敗"); }else{ NSLog(@"更新資料成功"); } }
FMDB方式:
- (void)updateData{ BOOL result = [_db executeUpdate:@"UPDATE t_student set age=20 WHERE age>20"]; if (result) { NSLog(@"更新成功"); }else{ NSLog(@"更新失敗"); } }
2.6、查詢資料
C語言方式:
- (void)queryData{ const char *sql = "SELECT id,name,age FROM t_student WHERE age<20"; sqlite3_stmt *stmt = NULL; //進行查詢前的準備工作 if(sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL)==SQLITE_OK){//SQL語句沒有問題 NSLog(@"查詢語句沒有問題"); //每呼叫一次sqlite3_step函式,stmt就會指向下一條記錄 while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一條記錄 //取出資料 //(1)取出第0個欄位的值(int) int ID=sqlite3_column_int(stmt, 0); //(2)取出第一列欄位的值(text) const unsigned char *name = sqlite3_column_text(stmt, 1); //(3)取出第二列欄位的值(int) int age = sqlite3_column_int(stmt, 2); printf("%d %s %d\n",ID,name,age); } }else{ NSLog(@"查詢語句有問題"); } }
FMDB方式:
- (void)queryData{ FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM t_student WHERE age > ?",@(20)]; while ([resultSet next]) { int ID = [resultSet intForColumn:@"id"]; NSString *name = [resultSet stringForColumn:@"name"]; int age = [resultSet intForColumn:@"age"]; NSLog(@"%d %@ %d",ID,name,age); } }
3、最後說一點
這是一個我的iOS交流群:624212887,群檔案自行下載,不管你是小白還是大牛熱烈歡迎進群 ,分享面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。——點選:加入
如果覺得對你還有些用,就關注小編+喜歡這一篇文章。你的支援是我繼續的動力。
下篇文章預告:·NSNotificationCenter使用小結
文章來源於網路,如有侵權,請聯絡小編刪除。