iOS 上FMDB操作

1、首先要在項(xiàng)目中導(dǎo)入FMDB,具體方法可在github上查看https://github.com/ccgus/fmdb

2、注意事項(xiàng):
(1)數(shù)據(jù)庫的語法在Xcode里面沒有提示,所以我們不能寫錯(cuò)一個(gè)單詞,要不然數(shù)據(jù)庫就會(huì)報(bào)錯(cuò)?。?!
(2)對(duì)數(shù)據(jù)庫進(jìn)行操作時(shí)都要先打開數(shù)據(jù)庫,操作完畢后一定要關(guān)上數(shù)據(jù)庫?。?!

3、繼承NSObject建一個(gè)類,這里我們?nèi)∶麨镈BManager

4、在.m文件里導(dǎo)入頭文件#import <FMDatabase.h>

5、定義一個(gè)成員變量 FMDatabase *_dataBase;

6、創(chuàng)建一個(gè)單例

+ (DBManager *)sharedManager {
    
    static DBManager *manager = nil;
    static dispatch_once_t onceTpken;
    dispatch_once(&onceTpken, ^{
        manager = [[DBManager alloc]init];
    });
    return manager;
}

7、創(chuàng)建數(shù)據(jù)庫表

- (void)createSingleDataBase {

    NSString *singlePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches/single.sqlite3"];

    _dataBase = [[FMDatabase alloc] initWithPath:singlePath];
    BOOL ret = [_dataBase open];//打開數(shù)據(jù)庫
    if (ret)
    {
        //kSingleId為唯一標(biāo)識(shí),設(shè)置成自動(dòng)增加,后面的參數(shù)要跟model里的實(shí)例變量對(duì)應(yīng)
        //NSString類型   varchar(255)
        //image   類型    blob
        //int     類型    integer
        NSString *singleSql = @"create table if not exists mySingle (kSingleId integer primary key autoincrement, CommentCount integer, HeadImg varchar(255), Memo varchar(255), NickName varchar(255), PublicStatus integer, SingleId integer, SingleName varchar(255), TypeId integer, TypeName varchar(255), UserId integer)";
        
        BOOL flag1 = [_dataBase executeUpdate:singleSql];
        
        if (!flag1)
        {
            NSLog(@"%@",_dataBase.lastErrorMessage);
        }
    }
    else
        NSLog(@"打開數(shù)據(jù)庫失敗");
    [_dataBase close];//關(guān)閉數(shù)據(jù)庫
}

8、在數(shù)據(jù)庫里增加數(shù)據(jù)

//增加多條數(shù)據(jù)
- (void)addSingleModel:(NSMutableArray *)modelArray {
    BOOL ret = [_dataBase open];//打開數(shù)據(jù)庫
    if (ret)
    {
        NSString *sql=@"";
        
        for (SingleListModel* model in modelArray) {
            //數(shù)據(jù)庫插入語句,into后面的表名和我們剛才創(chuàng)建的表名要一樣?。?!
            sql = @"insert into mySingle (CommentCount, HeadImg, Memo, NickName, PublicStatus, SingleId, SingleName, TypeId, TypeName, UserId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            
            //插入數(shù)據(jù),更新數(shù)據(jù)庫
            BOOL flag = [_dataBase executeUpdate:sql,model.CommentCount,model.HeadImg,model.Memo,model.NickName,model.PublicStatus,model.SingleId,model.SingleName,model.TypeId,model.TypeName,model.UserId ?: [NSNull null]];
            if (!flag) {
                NSLog(@"%@",_dataBase.lastErrorMessage);
            }
        }
    }
    [_dataBase close];//關(guān)閉數(shù)據(jù)庫
}```

//插入單條數(shù)據(jù)

  • (void)addSearchModel:(NSString *)Memo {

    BOOL ret = [_dataBase open];
    NSString *sql = @"";
    if (ret)
    {
    sql = @"insert into mySingle (Memo) values (?)";
    BOOL flag = [_dataBase executeUpdate:sql,Memo];
    if (!flag)
    {
    NSLog(@"%@",_dataBase.lastErrorMessage);
    }
    }
    [_dataBase close];
    }


9、查詢數(shù)據(jù)庫
  • (NSArray *)searchAllSingleData {
    BOOL ret = [_dataBase open];
    NSMutableArray *array = [NSMutableArray array];
    if(ret)
    {
    NSString *sql = @"select * from mySingle";
    FMResultSet *rs = [_dataBase executeQuery:sql];
    while ([rs next])
    {
    SingleListModel *model = [[SingleListModel alloc] init];
    model.CommentCount = [rs stringForColumn:@"CommentCount"];
    model.HeadImg = [rs stringForColumn:@"HeadImg"];
    model.Memo = [rs stringForColumn:@"Memo"];
    model.NickName =[rs stringForColumn:@"NickName"];
    model.PublicStatus = [rs stringForColumn:@"PublicStatus"];
    model.SingleId = [rs stringForColumn:@"SingleId"];
    model.SingleName = [rs stringForColumn:@"SingleName"];
    model.TypeId = [rs stringForColumn:@"TypeId"];
    model.TypeName = [rs stringForColumn:@"TypeName"];
    model.UserId = [rs stringForColumn:@"UserId"];

          [array addObject:model];
      }
    

    }
    [_dataBase close];
    return array;
    }```

10、刪除數(shù)據(jù)

//刪除所有數(shù)據(jù)
- (void)deleteAllSingle {

    [_dataBase executeUpdate:@"DELETE FROM mySingle"];
    [_dataBase executeUpdate:@"UPDATE sqlite_sequence set seq=0 where name='mySingle'"];

}```

//刪除單條數(shù)據(jù)

  • (void)deleteOneSearch:(NSString *)Memo {

    BOOL ret = [_dataBase open];
    if(ret) {

      BOOL flag = [_dataBase executeUpdateWithFormat:@"delete from mySingle where Memo = %@",Memo];
      if (!flag) {
          
          NSLog(@"==%@",_dataBase.lastErrorMessage);
      }
    

    }
    [_dataBase close];
    }


11、修改數(shù)據(jù)庫的數(shù)據(jù)

-(void)updateUserModel:(SingleListModel *)model kSingleId:(int) kSingleId
{
BOOL ret = [_dataBase open];
if(ret) {
NSString *sql = @"update mySingle set Memo = ?, NickName = ?, HeadImg = ? where kSingleId = ?";
//將圖片轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
NSData *data = UIImagePNGRepresentation(model. HeadImg);
BOOL ret = [_dataBase executeUpdate:sql,model.Memo,model.NickName,data,@(kSingleId)];
if (!ret)
{
NSLog(@"%@",_dataBase.lastErrorMessage);
}
}
[_dataBase close];
}


以上就是數(shù)據(jù)庫的增刪改查的基本操作啦,記住數(shù)據(jù)庫打開,一定要關(guān)閉!?。?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容