FMDB的使用

在日常的開發中,我們需要用到離線緩存將數據信息存入數據庫,在沒有網絡的時候進行加載,而我們IOS用的就是sqlite3數據庫,用原生的sql我們也能實現,但是書寫起來比較麻煩,這樣我們需要第三方FMDB。

在FMDB下載文件后,工程中必須導入如下文件,并使用 libsqlite3.dylib 依賴包。

FMDB常用類

FMDatabase : 一個單一的SQLite數據庫,用于執行SQL語句。

FMResultSet :執行查詢一個FMDatabase結果集。

FMDatabaseQueue :在多個線程來執行查詢和更新時會使用這個類

操作數據庫

 創建并且打開數據庫

   // 1 獲取數據庫對象
    NSString *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    path=[path stringByAppendingPathComponent:@"test.sqlite"];
    
     dataBase=[FMDatabase databaseWithPath:path];
    // 2 打開數據庫,如果不存在則創建并且打開
    BOOL open=[dataBase open];
    if(open){
        NSLog(@"數據庫打開成功");
}
  //3 創建表
    NSString * create1=@"create table if not exists t_user(id integer autoincrement primary key,name varchar)";
   BOOL c1= [dataBase executeUpdate:create1];
    if(c1){
        NSLog(@"創建表成功");
    }
  //4 插入數據
    NSString * insertSql=@"insert into t_user(id,name) values(?,?)";
    
//    插入語句1
    bool inflag1=[dataBase executeUpdate:insertSql,@(2),@"admin"];
    
//    插入語句2
    bool inflag2=[dataBase executeUpdate:insertSql withArgumentsInArray:@[@"admin",@(5)]];
    
//    插入語句3
    bool inflag3=[dataBase executeUpdateWithFormat:@"insert into t_user(id,name) values(%@,%d)",@"admin",6];
   //    刪除語句
    NSString * delete=@"delete from t_user";
    BOOL dflag= [dataBase executeUpdate:delete];
    if(dflag){
        NSLog(@"刪除成功");
    }
   //    修改語句
    NSString *update=@" update t_user set name=? ";
    BOOL flag=  [dataBase executeUpdate:update,@"zhangsan"];
    if(flag){
        NSLog(@"修改成功");
}


//    5查詢數據FMDB的FMResultSet提供了多個方法來獲取不同類型的數據


NSString * sql=@" select * from t_user ";
FMResultSet *result=[dataBase executeQuery:sql];
while(result.next){
int ids=[result intForColumn:@"id"];
NSString * name=[result stringForColumn:@"name"];
int ids=[result intForColumnIndex:0];
NSString * name=[result stringForColumnIndex:1];
NSLog(@"%@,%d",name,ids);     
    }

如果應用中使用了多線程操作數據庫,那么就需要使用FMDatabaseQueue來保證線程安全了。 應用中不可在多個線程中共同使用一個FMDatabase對象操作數據庫,這樣會引起數據庫數據混亂。 為了多線程操作數據庫安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很簡單,首先用一個數據庫文件地址來初使化FMDatabaseQueue,然后就可以將一個閉包(block)傳入inDatabase方法中。 在閉包中操作數據庫,而不直接參與FMDatabase的管理

     //2多線程操作
      NSString *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    path=[path stringByAppendingPathComponent:@"test.sqlite"];

    FMDatabaseQueue * queue=[FMDatabaseQueue databaseQueueWithPath:path];
    [queue inDatabase:^(FMDatabase *db) {
        NSString * create=@"create table if not exists t_book(id integer,name varchar)";
        BOOL c1= [db executeUpdate:create];
        if(c1){
            NSLog(@"成功");
        }

    }];
    
    [queue inDatabase:^(FMDatabase *db) {
            NSString * insertSql=@"insert into t_book(id,name) values(?,?)";
        
          //插入語句1
            bool inflag=[db executeUpdate:insertSql,@(2),@"admin"];
           if(inflag){
               NSLog(@"插入成功");
           }

    }];
    
    
    [queue inDatabase:^(FMDatabase *db) {
       
        FMResultSet * data=[db executeQuery:@" select * from t_book "];
        
        while (data.next) {
            
            int ids=[data intForColumn:@"id"];
            NSString *name=[data stringForColumn:@"name"];
            NSLog(@"%@",name);
            NSLog(@"%i",ids);   
        }
    }];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容