【iOS】使用SQLite與FMDB

來源:互聯網
上載者:User

標籤:sqlite   fmdb   資料庫   ios   sqlite3   

iOS中的SQLite與Android中的一模一樣,只是調用方法有差異。如果單從調用來講,Android封裝的一套helper更好用一些,而iOS原生的用C語言的幾個函數在操作,比較麻煩。不過引入第三方架構FMDB,使用起來就方便很多。


一、SQLite的基本使用

使用步驟:

1.匯入系統架構(C語言). (libsqlite3)2.標頭檔#import<sqlite3.h>.3. sqlite3_open(fileName.UTF8String, &_db); 開啟或者建立一個資料*_db自己定義一個sqlite3的成員變數.進行正刪改查時要用.4.sqlite3_exec(_db, sql, NULL, NULL,&error);*該函數可進行insert,delete,update操作.5.查詢操作select.*sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);做查詢前準備,檢測SQL語句是否正確.*sqlite3_step(stmt) 提取查詢到的資料,一次提取一條.*sqlite3_column_text(stmt, 0)取出第0列的資料.
直接看代碼更易懂:建立或開啟資料庫:
   // 0.擷取檔案地址    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    NSString *fileName = [path stringByAppendingPathComponent:@"t_student.sqlite"];    // 1.開啟或者建立一個資料庫    // (1.如果資料庫不存在就會自動建立資料庫並開啟, 2.如果資料庫儲存就會自動開啟資料庫)    int result = sqlite3_open(fileName.UTF8String, &_db);    if (result == SQLITE_OK) {        NSLog(@"開啟資料庫成功");        // 2.建立表        /**         sqlite3 傳遞已經開啟的資料庫         sql: 需要執行的資料庫語句         */        const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL);";        char *error = nil;        // 在db資料庫中執行sql語句        sqlite3_exec(self.db, sql, NULL, NULL, &error);        if (error) {            NSLog(@"建立表失敗");        }else        {            NSLog(@"建立表成功");        }    }else    {         NSLog(@"開啟資料庫失敗");    }

插入資料:(更新,刪除與此類似)
// 1.拼接插入sql語句        NSString *name = [NSString stringWithFormat:@"Jonathan-%d", i];        int age = arc4random_uniform(100);        NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student(name, age) VALUES ('%@', %d);", name, age];        char *error = nil;        // 2.執行插入sql語句        sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &error);        if (error) {            NSLog(@"添加失敗");        }else        {            NSLog(@"添加成功");        }

查詢資料:
const char *sql = "SELECT name, age FROM t_student;";//    char *error = nil;//    sqlite3_exec(self.db, sql, NULL, NULL, &error);    sqlite3_stmt *stmt; // 用於提取資料的    // 1.做查詢前的準備, 檢查sql語句是否正確    int result = sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL);    if (result == SQLITE_OK) {// 準備完成, 沒有錯誤        // 2.提取查詢到的資料到stmt, 一次提取一條        // 如果傳回值為SQLITE_ROW, 就代表提取到了一條記錄       while(sqlite3_step(stmt) == SQLITE_ROW)       {           // 3.取出提取到的記錄(資料)中的第0列的資料           const unsigned char *name = sqlite3_column_text(stmt, 0);           int age = sqlite3_column_int(stmt, 1);           NSLog(@"%s %d", name, age);       }    }

二、FMDB的使用FMDB的好處是對基本C庫的封裝,方便使用。同時還提供了多線程操作資料庫帶來的讀髒資料等問題的方法。
架構地址:https://github.com/ccgus/fmdb

使用:(需要FMDatabase *db成員變數)建立或開啟:
// 0.擷取沙箱路徑    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    NSString *fileName = [path stringByAppendingPathComponent:@"t_student.sqlite"];    // 1.獲得資料庫物件    self.db = [FMDatabase databaseWithPath:fileName];        // 2.開啟資料庫    if ([self.db open]) {        NSLog(@"開啟成功");        // 2.1建立表       BOOL success =  [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT NOT NULL, age INTEGER NOT NULL);"];        if (success) {            NSLog(@"建立表成功");        }else        {            NSLog(@"建立表失敗");        }    }else    {        NSLog(@"開啟失敗");    }

插入操作:(更新,刪除與此類似)
BOOL success = [self.db executeUpdate:@"INSERT INTO t_student(name , age) VALUES(?, ?);", @"xuneng", @(10)];// 注意只能拼接物件類型        if (success) {            NSLog(@"添加成功");        }else        {            NSLog(@"添加失敗");        }

查詢:
// 1.查詢    FMResultSet *set = [self.db  executeQuery:@"SELECT * FROM t_student;"];        // 2.取出資料    while ([set next]) {                // 取出姓名//       NSString *name = [set stringForColumnIndex:1];        // 取出年齡//       int age = [set intForColumnIndex:2];        NSString *name = [set stringForColumn:@"name"];        int age = [set intForColumn:@"age"];        NSLog(@"name = %@, age = %d", name, age);    }

FMDB還能定義操作隊列 FMDatabaseQueue,這個隊列是安全執行緒的。(FMDatabase不是安全執行緒的)
同時還能開啟 事物、提交事物。使用相當方便。
可參照https://github.com/ccgus/fmdb上進行學習,寫的相當詳細。

轉載請註明出處:http://blog.csdn.net/xn4545945  



【iOS】使用SQLite與FMDB

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.