<p id="qitwt"></p>
      1. <object id="qitwt"><strong id="qitwt"></strong></object>
        <p id="qitwt"></p>
        <li id="qitwt"></li>
        <p id="qitwt"><del id="qitwt"><xmp id="qitwt"></xmp></del></p>
        <p id="qitwt"><label id="qitwt"></label></p>
      2. <acronym id="qitwt"></acronym>
        <p id="qitwt"></p>
        免費開源的iOS開發學習平臺

        SQLite入門:1-數據庫的操作

        對于簡單的數據,我們完全可以使用Plist來存取數據。隨著數據逐漸變大,查詢數據和修改數據就會變得越來越麻煩。另外,使用Plist來存取數據無法解決的一個問題是,每次查詢數據需要將整個文件都加載到內存中,如果文件很大這顯然是不合適的。此時,我們就需要使用到SQLite。

        SQLite是一個數據庫引擎,無需服務端支持即可直接運行在客戶端上。SQLite使用非常廣泛,在每一臺iOS設備,Android設備,Mac電腦,Windows10上面都能使用SQLite。就像其他數據庫一樣,SQLite 引擎不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接,并且SQLite 直接訪問其存儲文件。

        數據類型

        存儲在SQLite數據庫中的數據具有以下幾種存儲類型。

        | 存儲類型 | 描述 |
        | --- | --- |
        | NULL | 值是一個 NULL 值。 |
        | INTEGER | 值是一個帶符號的整數,根據值的大小存儲在 1、2、3、4、6 或 8 字節中。 |
        | REAL | 值是一個浮點值,存儲為 8 字節的 IEEE 浮點數字。 |
        | TEXT | 值是一個文本字符串,使用數據庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲。 |
        | BLOB | 值是一個 blob 數據,完全根據它的輸入存儲。 |

        導入SQLite

        在開發過程中,如果我們希望使用SQLite,則需要預先導入SQLite的庫文件。

        首先創建一個Single View Application工程,在工程的TARGETS中選擇Build Phases選項,在Link Binary With Libraries中添加libsqlite3.dylib到工程中。在添加的過程中,我們會發現存在libsqlite3.dylib和libsqlite3.0.tbd。這兩者的區別是:libsqlite3.dylib總是鏈向最新的libsqlite庫,目前最新的是libsqlite3.0。也就是說如果以后有libsqlite3.1.tbd,則鏈向的是libsqlite3.1.tbd。

        添加依賴庫的圖片

        在程序需要使用SQLite的類中添加頭文件。

        #import <sqlite3.h>
        

        #創建數據庫

        數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生于距今五十年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以后,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。
        現在我們來創建一個SQLite數據庫。

        • 在控制器類中添加一個sqlite3類型的屬性
        @interface ViewController ()
        @property (nonatomic, assign) sqlite3 *db;
        @end
        
        • 在ViewController.m中,添加如下的方法,用戶創建一個SQLite數據庫
        - (BOOL)openDatabaseWithName:(NSString *)databaseName {
            NSString *docsDir = nil;
            NSArray *dirPath = nil;
            
            // 獲取文檔目錄路徑
            dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            docsDir = [dirPath objectAtIndex:0];
            
            // 拼接數據庫路徑
            NSString *databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: databaseName]];
            
            NSFileManager *fileManager = [NSFileManager defaultManager];
            
            const char *dbPath = [databasePath UTF8String];
            if (![fileManager fileExistsAtPath: databasePath ]) {
                if (sqlite3_open(dbPath, &_db) == SQLITE_OK) {
                    NSLog( @"數據庫 打開/創建 成功:%@", databasePath);
                    return YES;
                }
                else {
                    NSLog( @"數據庫 打開/創建 失?。?@", databasePath);
                    return NO;
                }
            }else{
                NSLog(@"數據庫已創建: %@", databasePath);
                if (sqlite3_open(dbPath, &_db) == SQLITE_OK) {
                    NSLog( @"數據庫 打開/創建 成功:%@", databasePath);
                    return YES;
                }
                else {
                    NSLog( @"數據庫 打開/創建 失?。?@", databasePath);
                    return NO;
                }
                return YES;
            }
        }
        

        我們可以在viewDidLoad方法中執行這個方法,會有以下的輸出結果。

        - (void)viewDidLoad {
            [super viewDidLoad];
            [self openDatabaseWithName:@"99iOS.sqlite"];
        }
        

        我們打開應用程序的沙盒路徑,可以查看已經創建的數據庫文件。

        在上面的代碼中,函數sqlite3_open用來創建/打開一個數據庫。如果dbPath路徑上有數據庫則打開,沒有則新建一個數據庫,并把值賦給db指針。該函數有一個輸入參數filename和一個輸出函數ppDb。

        SQLITE_API int SQLITE_STDCALL sqlite3_open(
          const char *filename,   /* Database filename (UTF-8) */
          sqlite3 **ppDb          /* OUT: SQLite db handle */
        );
        

        在對數據庫操作完成之后記得要執行sqlite3_close函數關閉數據庫,來回收系統資源。

        - (void)closeDB {
            if (NULL == _db) {
                NSLog(@"數據庫不存在");
            } else {
                sqlite3_close(_db); // 關閉數據庫
            }
        }
        

        示例代碼

        https://github.com/99ios/13.5.1


        青青草国产成人久久_jizzjizz日本护士高清_亚洲 另类 国产 另类_99久久免费精品色老
        <p id="qitwt"></p>
          1. <object id="qitwt"><strong id="qitwt"></strong></object>
            <p id="qitwt"></p>
            <li id="qitwt"></li>
            <p id="qitwt"><del id="qitwt"><xmp id="qitwt"></xmp></del></p>
            <p id="qitwt"><label id="qitwt"></label></p>
          2. <acronym id="qitwt"></acronym>
            <p id="qitwt"></p>