zoukankan      html  css  js  c++  java
  • 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数据库。

  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/guohai-stronger/p/9251131.html
Copyright © 2011-2022 走看看