【iOS开发 】—— FMDB的使用

1 篇文章 0 订阅

在仿写知乎日报app的时候,收藏的文章要存放在数据库中,所以需要用到OC封装好的FMDB数据库。

什么是FMDB?

OC中使用C语言函数对原生SQLite数据库进行增删改查操作,复杂麻烦,于是,就出现了一系列将SQLite API封装的库。FMDB是针对libsqlite3框架进行封装的三方,它以OC的方式封装了SQLite的C语言的API,使用步骤与SQLite相似。

FMDB的优点

  • FMDB面向对象,避免了复杂的C语言代码
  • FMDB是轻量级框架,使用更加灵活、方便
  • 提供了多线程的方式来操作数据库,可以防止多线程操作带来的数据混乱,保证了多线程安全跟数据准确性。

常使用的类

1、FMDatabase
sqlite的数据库对象,一个FMDatabase对象就代表了一个单独的sqlite数据库连接,用来执行SQLite的命令。

2、FMResultSet
sqlite的结果集,数据库查询结果集

3、FMDatabaseQueue
多线程,使用多线程对数据进行操作,是线程安全的。

4、FMDatabaseAdditions
扩展FMDatabase类,新增对查询结果只返回单个值的方法进行简化,对表、列是否存在、版本号、校验SQL等等功能。

5、FMDatabasePool
可以使用任务池的方式,对多线程的操作提供了支持

FMDB的使用举例

创建数据库

NSString* doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString* fileName = [doc stringByAppendingPathComponent:@"collection.sqlite"];
    FMDatabase* database = [FMDatabase databaseWithPath:self.path];

注意:这里有个文件路径有三种形式
a、具体的文件路径
会根据具体的文件路径来创建相应的数据库,如果路径不存在,会自动创建
b、路径为空的字符串@“”
会在临时目录下面创建一个空的数据库,当FMDB连接关闭时,数据库文件也被删除。
c、当为nil的时候
会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁

创建表

    if([self.database open]) {
        BOOL result = [self.database executeUpdate:@"CREATE TABLE IF NOT EXISTS t_collection(title text NOT NULL, imageURL text NOT NULL, webURL text NOT NULL, id text NOT NULL);"];
        if (!result) {
            NSLog(@"创建失败!");
        } else {
            NSLog(@"创建成功!");
        }
    } else {
        NSLog(@"打开失败");
    }

以上这个表就有四列内容:title、imageURL、webURL、id;

插入数据

- (void) insertData {
    FMDatabase* database = [FMDatabase databaseWithPath:self.path];
    if ([database open]) {
        BOOL result = [database executeUpdate:@"INSERT INTO t_collection(title, imageURL, webURL, id) VALUES (?,?,?,?);",title, imageURL, web, id];
        if (!result) {
            NSLog(@"增加数据失败!\n");
        } else {
            NSLog(@"增加数据成功!\n");
        }
        [database close];
    } else {
        NSLog(@"打开数据库失败!\n");
    }
}

VALUES(?,?,?,?)中的"?"就相当于%@,后面是参数。

删除数据

- (void) deleteData {
    FMDatabase* database = [FMDatabase databaseWithPath:self.path];
    if ([database open]) {
        NSString* sqlDelete = @"delete from t_collection WHERE imageURL = ?";
        BOOL result = [database executeUpdate:sqlDelete, imageURL];
        if (!result) {
            NSLog(@"删除数据失败!\n");
        } else {
            NSLog(@"删除数据成功!\n");
        }
        [database close];
    } else {
        NSLog(@"打开数据库失败!\n");
    }
}

遍历数据库

- (void)ergodicData { //遍历数据库
    NSInteger page = self.scrollView.contentOffset.x / W;
    FMDatabase* database = [FMDatabase databaseWithPath:self.path];
    if([database open]) {
        FMResultSet *resultSet = [database executeQuery:@"SELECT * FROM t_collection"];
        while ([resultSet next]) {
            if([[resultSet stringForColumn:@"title"] isEqualToString:title]) {
                NSLog(@"存在此内容");
            }
        }
        [database close];
    } else {
        NSLog(@"打开数据库失败!\n");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值