• SQLite与FMDB使用中区别


    前几篇已经写完了SQLite与FMDB的基本内容以及衍生出来的知识点,我们这一篇主要讲述FMDB与SQLite在基本使用中的区别,大约需要5-10分钟时间讲述内容,欢迎大家指正。

    基本使用区别

    1.数据库的操作对象

    (1)SQLite通过sqlite3

    sqlite3 *_db;

    (2)FMDB方式

    FMDatabase *db;

    2.打开数据库方式

    (1)SQLite方式

    - (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(@"打开数据库失败");
        }
    }

    (2)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(@"打开数据库失败");
        }
    
    }

    3.创建表格

    (1)SQLite方式

    - (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);
        }
    }

    (2)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(@"创建表格失败");
        }
    }

    4.插入数据

    (1)SQLite方式

    - (void)insertData{
        //插入数据
        for (int i=0; i<10; i++) {
            //拼接sql语句
            NSString *name = [NSString stringWithFormat:@"yixiangboy--%d",arc4random_uniform(100)];
            int age = arc4random_uniform(20)+10;
            NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,age) VALUES ('%@',%d);",name,age];
    
             //执行SQL语句
            char *errmsg = NULL;
            sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
            if (errmsg) {//如果有错误信息
                NSLog(@"插入数据失败--%s",errmsg);
            }else{
                NSLog(@"插入数据成功");
            }
        }
    }

    (2)FMDB方式

    - (void)insertData{
        for (int i=0; i<10; i++) {
            NSString *name = [NSString stringWithFormat:@"yixiang-%d",arc4random_uniform(100)];
            int age = arc4random_uniform(20)+10;
            BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(age)];
            if (result) {
                NSLog(@"插入成功");
            }else{
                NSLog(@"插入失败");
            }
        }
    }

    5.删除数据

    (1)SQLite方式

    - (void)deleteData{
        //删除age小于15的数据
        NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_student WHERE age<15"];
        char *errmsg = NULL;
        sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
        if (errmsg) {
            NSLog(@"删除数据失败");
        }else{
            NSLog(@"删除数据成功");
        }
    }

    (2)FMDB方式

    - (void)deleteData{
        BOOL result = [_db executeUpdate:@"DELETE FROM t_student WHERE age<15"];
        if (result) {
            NSLog(@"删除成功");
        }else{
            NSLog(@"删除失败");
        }
    }

    6.更新数据

    (1)SQLite方式

    - (void)updateData{
        //大于20岁的都置为20岁
        NSString *sql = [NSString stringWithFormat:@"UPDATE t_student set age=20 WHERE age>20"];
        char *errmsg = NULL;
        sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
        if (errmsg) {
            NSLog(@"更新数据失败");
        }else{
            NSLog(@"更新数据成功");
        }
    }

    (2)FMDB方式

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

    7.查询数据

    (1)SQLite方式

    - (void)queryData{
        const char *sql = "SELECT id,name,age FROM t_student WHERE age<20";
        sqlite3_stmt *stmt = NULL;
    
        //进行查询前的准备工作
        if(sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL)==SQLITE_OK){//SQL语句没有问题
            NSLog(@"查询语句没有问题");
    
            //每调用一次sqlite3_step函数,stmt就会指向下一条记录
            while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
                //取出数据
                //(1)取出第0个字段的值(int)
                int ID=sqlite3_column_int(stmt, 0);
                //(2)取出第一列字段的值(text)
                const unsigned char *name = sqlite3_column_text(stmt, 1);
                //(3)取出第二列字段的值(int)
                int age = sqlite3_column_int(stmt, 2);
    
                printf("%d %s %d
    ",ID,name,age);
            }
        }else{
            NSLog(@"查询语句有问题");
        }
    }

    (2)FMDB方式

    - (void)queryData{
        FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM t_student WHERE age > ?",@(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);
        }
    }

    以上就是SQLite在基本使用上与FMDB的区别,内容比较简短,但还是比较清晰的,希望对大家有所帮助,下一篇将讲述苹果官方自带的CoreData数据库。

  • 相关阅读:
    iOS开发-UIScrollView原理
    关于tableView点击状态栏列表回到顶部的说明
    实用技术之bugly
    KVO你所不知道的"坑"
    iOS iPhone SDK 包含哪些东西?
    NSTime的全面认识
    四 数据结构与算法总结(一)
    三 数据结构 --数和二叉树
    二 线性表
    一 数据结构的概念,时间复杂度和空间复杂度
  • 原文地址:https://www.cnblogs.com/guohai-stronger/p/9251131.html
Copyright © 2020-2023  润新知