博客> iOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别
iOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别
1小时前 评论:0 阅读:280 月华七子
ios 数据存储 FMDB

一、简要介绍

libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。

FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防止数据混乱。开源地址为https://github.com/ccgus/fmdb。

这是一个我的iOS交流群:624212887,群文件自行下载,不管你是小白还是大牛热烈欢迎进群 ,分享面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。——点击:加入

如果觉得对你还有些用,就关注小编+喜欢这一篇文章。你的支持是我继续的动力。

下篇文章预告:NSNotificationCenter使用小结

文章来源于网络,如有侵权,请联系小编删除。

下面我们就对比他们两者的使用,好坏优劣立马就可以分晓。

二、基本使用和对比

2.0、数据库操作对象

C语言方式:

sqlite3 *_db;

FMDB方式:

FMDatabase *db;

2.1、打开数据库

C语言方式:

- (void)openDB{
    //获取数据库文件路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];

    //将OC字符串转换为c语言的字符串
    const char *cfileName = fileName.UTF8String;

    //打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
    int result = sqlite3_open(cfileName, &_db);
    if (result == SQLITE_OK) {//打开成功
        NSLog(@"成功打开数据库");
    }else{
        NSLog(@"打开数据库失败");
    }
}

FMDB方式:

- (void)openDB{
    //1、获取数据库文件路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];

    //2、获取数据库连接
    _db = [FMDatabase databaseWithPath:fileName];

    //3、打开数据库连接
    if ([_db open]) {
        NSLog(@"打开数据库成功");
    }else{
        NSLog(@"打开数据库失败");
    }

}

2.2、创建表格

C语言方式:

- (void)createTable{
    //创建表
    const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
    char *errmsg= NULL;
    int result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
    if (result==SQLITE_OK) {
        NSLog(@"创建表成功");
    }else{
        NSLog(@"创建表失败---%s",errmsg);
    }
}

FMDB方式:

- (void)createTable{
    BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
    if (result) {
        NSLog(@"创建表格成功");
    }else{
        NSLog(@"创建表格失败");
    }
}

2.3、插入数据

C语言方式:

- (void)insertData{
    //插入数据
    for (int i=0; i<10 xss=removed xss=removed xss=removed xss=removed i=0; xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed age=20>20"];
    char *errmsg = NULL;
    sqlite3_exec&#40;_db, sql.UTF8String, NULL, NULL, &errmsg&#41;;
    if (errmsg) {
        NSLog(@"更新数据失败");
    }else{
        NSLog(@"更新数据成功");
    }
}

FMDB方式:

- (void)updateData{
    BOOL result = [_db executeUpdate:@"UPDATE t_student set age=20 WHERE age>20"];
    if (result) {
        NSLog(@"更新成功");
    }else{
        NSLog(@"更新失败");
    }
}

2.6、查询数据

C语言方式:

- (void)queryData{
    const char *sql = "SELECT id,name,age FROM t_student WHERE age<20 xss=removed xss=removed xss=removed ID=sqlite3_column_int(stmt, xss=removed xss=removed xss=removed> ?",@(20)];

    while ([resultSet next]) {
        int ID = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet stringForColumn:@"name"];
        int age = [resultSet intForColumn:@"age"];
        NSLog(@"%d %@ %d",ID,name,age);
    }
}

3、最后说一点

这是一个我的iOS交流群:624212887,群文件自行下载,不管你是小白还是大牛热烈欢迎进群 ,分享面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。——点击:加入

如果觉得对你还有些用,就关注小编+喜欢这一篇文章。你的支持是我继续的动力。

下篇文章预告:·NSNotificationCenter使用小结

文章来源于网络,如有侵权,请联系小编删除。

收藏
1
sina weixin mail 回到顶部