免費開源的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


日韩av 中文字幕 1_亚洲第一区在线_亚洲V日韩V精品v无码专区_色鬼久久亚洲AV综合