OC包装下的轻量SQL——FMDB

什么是FMDB

官方介绍:

This is an Objective-C wrapper around SQLite.

FMDB是针对libsqlite3框架进行封装的三方数据库,它以OC的方式封装了SQLite的C语言的API,使用步骤与SQLite相似。
FMDB的GitHub链接

FMDB的优缺点

FMDB的基本类

FMDB的使用方法

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
NSString *sqlFilePath = [path stringByAppendingPathComponent:@"story.sqlite"];
  • 关于 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde):

函数原型: NSArray<nsstring *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);</nsstring>
iPhone会为每一个应用程序生成一个私有目录,并随即生成一个数字字母串作为目录名。在每一次应用程序启动时,这个字母数字串都是不同于上一次。
iOS中沙盒模型中有四个文件夹,我们通常使用其中的Documents目录进行数据持久化的保存,而这个Documents目录可以通过:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserdomainMask,YES)
得到。

根据一个数据库文件路径来创建一个FMDatabase对象,路径三种形式:

  1. &#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x7CFB;&#x7EDF;&#x8DEF;&#x5F84;:如果不存在该路径,会自动创建
  2. &#x4E00;&#x4E2A;&#x7A7A;&#x5B57;&#x7B26;&#x4E32;@"":在一个临时目录下创建一个空的数据库,当数据库连接关闭,自动删除数据库文件
  3. NULL:会创建一个内存中临时数据库,当数据库连接关闭的时候,将被自动删除

后两种不是我们的需要,因为我们需要在关闭连接之后,数据库文件依旧存在。

FMDatabase *db = [FMDatabase databaseWithPath:sqlFilePath];
self.DataBase = db;

if (![self.Database open]) {
    self.Database = nil;
    return;
}

if ([self.Database open]) {

}

如果打开失败,则将db对象置位nil,直接return。因为既然都打不开,肯定不能进一步进行增删改查的操作。

BOOL result = [self.Database executeUpdate:@"CREATE TABLE 'collect_story' ('title' VARCHAR(255), 'image' BLOB)"];
if (result) {
    NSLog(@"创表成功");
} else {
    NSLog(@"创表失败");
}

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
NSString *sqlFilePath = [path stringByAppendingPathComponent:@"story.sqlite"];

FMDatabase *db = [FMDatabase databaseWithPath:sqlFilePath];
self.DataBase = db;
self

if (![self.Database open]) {
    self.Database = nil;
    return;
}
if ([self.Database open]) {

    BOOL result = [self.Database executeUpdate:@"CREATE TABLE 'collect_story' ('title' VARCHAR(255), 'image' BLOB)"];
    if (result) {
        NSLog(@"创表成功");
    } else {
        NSLog(@"创表失败");
    }
}
- (void)insertTitle:(NSString *)titleStr andImage:(NSDate *)imageDate {
    if ([self.Database open]) {
        NSLog(@"打开成功");
        NSString *sql = @"INSERT INTO collect_story (title,image) VALUES (?,?)";
        BOOL result = [self.Database executeUpdate:sql, titleStr, imageDate];
        if (result) {
            NSLog(@"增加数据成功");
        } else {
            NSLog(@"增加数据失败");
        }
        [self.Database close];
    } else {
        NSLog(@"打开失败");
    }
}

第四行 INSERT INTO XXX :向XXX数据库中插入数据。后边的第一个括号是你要赋值的索引,VALUES之后就是你要赋的值。注意索引和索引数的对应,还有要和当时定义类型的匹配。

- (void)deleteData {
    if ([self.Database open]) {
        NSString *sql = @"delete from collect_story WHERE collectionState = ?";
        BOOL result = [self.Database executeUpdate:sql, @"xixixixi"];
        if (!result) {
            NSLog(@"数据删除失败");
        } else {
            NSLog(@"数据删除成功");
        }
        [self.Database close];
    }
}

第三行 delete from XXX WHERE a = ?:意思是删除XXX数据库中的一组数据,当WHERE之后的a = ?条件成立后。

- (void)updateData {
    if ([self.Database open]) {
        NSString *sql = @"UPDATE collect_story SET id = ? WHERE nameLabel = ?";
        BOOL result = [self.Database executeUpdate:sql, @"111", @"复杂化"];
        if (!result) {
            NSLog(@"数据修改失败");
        } else {
            NSLog(@"数据修改成功");
        }
        [self.Database close];
    }
}
- (void)queryData {
    if ([self.Database open]) {

        FMResultSet *resultSet = [self.Database executeQuery:@"SELECT * FROM collect_story"];

        while ([resultSet next]) {
            NSString *nameLabel = [resultSet stringForColumn:@"nameLabel"];
            NSLog(@"nameLabel = %@",nameLabel);
            NSString *imageURL = [resultSet stringForColumn:@"imageURL"];
            NSLog(@"imageURL = %@",imageURL);
        }
        [self.Database close];
    }
}

第三行 SELECT * FROM XXX:选择XXX中的数据。

FMDB相关

未完待续

Original: https://blog.csdn.net/LANGJ1/article/details/121317809
Author: 浪极
Title: OC包装下的轻量SQL——FMDB

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816205/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球