FMDB | 實現資料的增刪改查

FBY展菲發表於2018-01-30

一:介紹

FMDB是一個輕量級的資料庫,用於將網路資源儲存在本地。 專案中使用 ARC 還是 MRC,對使用 FMDB 都沒有任何影響,FMDB 會在編譯專案時自動匹配。 FMDB 將 SQLite API 進行了很友好的封裝,使用起來非常方便。

下面是對FMDB的使用總結,分享給大家,另外附一份demo供大家參考。

原始碼Demo獲取方法

關注 【網羅開發】微信公眾號,回覆【92】便可領取。 網羅天下方法,方便你我開發,更多iOS技術乾貨等待領取,所有文件會持續更新,歡迎關注一起成長!

二:FMDB優點

  • 1.使用起來更加物件導向,省去了很多麻煩、冗餘的C語言程式碼

  • 2.對比蘋果自帶的Core Data框架,更加輕量級和靈活

  • 3.提供了多執行緒安全的資料庫操作方法,有效地防止資料混亂

三:將FMDB第三方庫引入到專案

下載FMDB庫檔案,demo中是直接匯入專案中,可直接下載demo引用庫檔案,也可以使用CocoaPods匯入。

注意:需要 libsqlite3.dylib 依賴(具體流程 Project->TARGETS->Build Phases->Link Binary With Libraries,然後點選+號引用該動態庫)

四:FMDB主要的核心類

4.1 FMDatabase

一個FMDatabase物件就代表一個單獨的SQLite資料庫,用來執行SQL語句。

    //1.獲得資料庫檔案的路徑
    NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName=[doc stringByAppendingPathComponent:@"userData.sqlite"];
    self.dbPath = fileName;
    //2.獲得資料庫
    FMDatabase *db=[FMDatabase databaseWithPath:self.dbPath];
複製程式碼

4.2 FMResultSet

使用FMResultSet執行查詢後的結果集

    // 1.執行查詢語句
    FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_userData"];
    
    // 2.遍歷結果
    while ([resultSet next]) {
        
        NSString *nameStr = [resultSet stringForColumn:@"userName"];
        [self.nameArr addObject:nameStr];
        
        NSString *ageStr = [resultSet stringForColumn:@"userAge"];
        [self.ageArr addObject:ageStr];
        
        NSString *idStr = [resultSet stringForColumn:@"id"];
        [self.idArr addObject:idStr];
    }
複製程式碼

4.3 FMDatabaseQueue

FMDatabaseQueue是在多執行緒下查詢和更新資料庫用到的類

五:使用FMDB進行增刪改查

通常對資料庫的操作,我們一般稱為CURD,即對錶進行建立(Create)、更新(Update)、讀取(Read)和刪除(Delete)操作。

5.1 資料型別分析

對資料庫中儲存的每一個值都有一個型別

  • NULL 這個值為空值
  • INTEGER 值被標識為整數,依據值的大小可以依次被儲存1~8個位元組
  • REAL 所有值都是浮動的數值
  • TEXT 值為文字字串
  • BLOB 值為blob資料

5.2 FMDB庫檔案使用

1.引入標頭檔案

#import "FMDB.h"
複製程式碼

2.定義屬性

@interface viewController ()
@property(nonatomic,strong)FMDatabase *db;

@property(strong,nonatomic)NSString * dbPath;

@property(strong,nonatomic)UITextField *nameTxteField;
@property(strong,nonatomic)UITextField *ageTxteField;
@end
複製程式碼

3.獲取資料庫檔案路徑

//獲得資料庫檔案的路徑
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName=[doc stringByAppendingPathComponent:@"userData.sqlite"];
self.dbPath = fileName;
複製程式碼

4.建表

    //2.獲得資料庫
    FMDatabase *db=[FMDatabase databaseWithPath:self.dbPath];
    //3.開啟資料庫
    if ([db open]) {
        //4.創表
        BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_userData (id integer PRIMARY KEY AUTOINCREMENT, userName text NOT NULL, userAge text NOT NULL);"];
        if (result){
            NSLog(@"創表成功");
        }else{
            NSLog(@"創表失敗");
        }
    }
    self.db=db;
    
    [self insert];

複製程式碼

5.3 新增資料

//新增資料
-(void)insert{
    BOOL res = [self.db executeUpdate:@"INSERT INTO t_userData (userName, userAge) VALUES (?, ?);", _nameTxteField.text, _ageTxteField.text];
    
    if (!res) {
        NSLog(@"增加資料失敗");
    }else{
        NSLog(@"增加資料成功");
        
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"新增資料成功" preferredStyle:UIAlertControllerStyleAlert];
        [self presentViewController:alert animated:YES completion:nil];
        [self performSelector:@selector(dismiss:) withObject:alert afterDelay:0.5];
        
    }
}
複製程式碼

FMDB | 實現資料的增刪改查

5.4 刪除資料

刪除資料分為刪除一條資料和刪除整表資料

  1. 刪除一條資料
// 刪除一條資料
- (void)deleteData:(NSInteger)userid{
    //1.獲得資料庫檔案的路徑
    NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName=[doc stringByAppendingPathComponent:@"userData.sqlite"];
    
    //2.獲得資料庫
    FMDatabase *db = [FMDatabase databaseWithPath:fileName];
    if ([db open]) {
        
        NSString *str = [NSString stringWithFormat:@"DELETE FROM t_userData WHERE id = %ld",userid];
        BOOL res = [db executeUpdate:str];
        if (!res) {
            NSLog(@"資料刪除失敗");
            [self lookData];
        } else {
            NSLog(@"資料刪除成功");
            [self lookData];
        }
        [db close];
    }
}
複製程式碼

2.刪除整表資料

刪除整表資料只需要將刪除一條資料的語句更換為如下語句即可

NSString *str = @"DELETE FROM t_userData";
複製程式碼

FMDB | 實現資料的增刪改查

5.5 修改資料

// 更新資料
- (void)updateData {
    //獲得資料庫檔案的路徑
    NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName=[doc stringByAppendingPathComponent:@"userData.sqlite"];
    self.dbPath = fileName;
    
    FMDatabase *db = [FMDatabase databaseWithPath:self.dbPath];
    if ([db open]) {
        NSString *sql = @"UPDATE t_userData SET userName = ? , userAge = ? WHERE id = ?";
        BOOL res = [db executeUpdate:sql,_nameTxteField.text,_ageTxteField.text,_userId];
        if (!res) {
            NSLog(@"資料修改失敗");
        } else {
            NSLog(@"資料修改成功");

            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"資料修改成功" preferredStyle:UIAlertControllerStyleAlert];
            [self presentViewController:alert animated:YES completion:nil];
            [self performSelector:@selector(dismiss:) withObject:alert afterDelay:1.0];
        }
        [db close];
    }
}

複製程式碼

FMDB | 實現資料的增刪改查

5.6 查詢資料

//查詢資料
- (void)lookData {

    //1.獲得資料庫檔案的路徑
    NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName=[doc stringByAppendingPathComponent:@"userData.sqlite"];
    
    //2.獲得資料庫
    FMDatabase *db=[FMDatabase databaseWithPath:fileName];
    
    //3.開啟資料庫
    if ([db open]) {
        
    }
    self.db=db;
    
    // 1.執行查詢語句
    FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_userData"];
    
    // 2.遍歷結果
    while ([resultSet next]) {
        
        NSString *nameStr = [resultSet stringForColumn:@"userName"];
        [self.nameArr addObject:nameStr];
        NSString *ageStr = [resultSet stringForColumn:@"userAge"];
        [self.ageArr addObject:ageStr];
        NSString *idStr = [resultSet stringForColumn:@"id"];
        [self.idArr addObject:idStr];
    }
    
    [self.myTableView reloadData];
    
}
複製程式碼

FMDB | 實現資料的增刪改查

希望可以幫助大家,如有問題可加QQ技術交流群: 668562416

如果哪裡有什麼不對或者不足的地方,還望讀者多多提意見或建議

如需轉載請聯絡我,經過授權方可轉載,謝謝

本篇已同步到個人部落格:FBY展菲

相關文章