FMDB是什么

       项目需要数据本地缓存,所以想到了使用本地数据库。iOS的本地数据库就是SQLite,而FMDB就是一个Objective-C编写的SQLite封装库。

FMDB的导入及使用

1.FMDB地址:Github地址

2.使用Cocoapods导入,只需要在Podfile中添加pod 'FMDB',然后pod install

FMDatabaseQueue

数据库创建:

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [docPath stringByAppendingPathComponent:[NSString stringWithFormat:@"my.sql"]];
    NSLog(@"%@",filePath);
    _queueDB = [FMDatabaseQueue databaseQueueWithPath:filePath];

表的创建:

[_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
            BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS myInfo (myId integer PRIMARY KEY AUTOINCREMENT,myName text NOT NULL)"];
            if (result) {
                NSLog(@"创建表myInfo成功");
            }else{
                NSLog(@"创建表myInfo失败");
            }
     }];

添加数据:

[_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
            BOOL result = [db executeUpdate:@"INSERT INTO myInfo (myId,myName) VALUES (?,?)",@1,@"yu"];
            if (result) {
                NSLog(@"表myInfo添加数据成功");
            }else{
                NSLog(@"表myInfo添加数据失败");
            }
     }];

添加数据,如果已经存在就更新

   [_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
            BOOL result = [db executeUpdate:@"REPLACE INTO myInfo (myId,myName) VALUES (?,?)",@1,@"yu"];
            if (result) {
                NSLog(@"表myInfo添加数据成功");
            }else{
                NSLog(@"表myInfo添加数据失败");
            }
     }];

 查询数据:

[_queueDB inDatabase:^(FMDatabase * _Nonnull db) {
            FMResultSet *set = [db executeQuery:@"SELECT myName FROM myInfo WHERE myId = ?",@1];
            while ([set next]) {
                NSString *name = [set intForColumn:@"myName"];
                NSLog(@"%@",name);
            }
            [set close];
     }];

事务的使用:

    [myDB.queueDB inTransaction:^(FMDatabase * _Nonnull db, BOOL * _Nonnull rollback) {
         BOOL result = [db executeUpdate:@"INSERT INTO curveInfo (m yId,myName) VALUES (?,?)",@1,@""];
         if (!result) {
            *rollback = YES;
            return;
         }
    }];

错误总结

    进入下面语句并报错崩溃

else if (args) {
         obj = va_arg(args, id);
    }

解决 :进行INSERT操作时不能插入简单数据类型(int, long等),必须转化为NSNumber类,如下:

[NSNumber numberWithInt:1]

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐