iOS开发之SQLite

作者: 刹那年华逝 | 来源:发表于2017-11-25 21:36 被阅读0次

    1.SQLite简介

    SQLite 是一种轻量级的关系型数据库,其最初的设计目标是用于嵌入式系统。它占用资源少,处理速度快。能够支持Windows/Linux/Unix/Mac OS X/iOS等等主流的操作系统。现在最新的版本是SQLite3

    2.在iOS开发中使用SQLite

    2.1 导入动态库libsqlite3.tbd

    2.1.2导入头文件
    #import <sqlite3.h>
    

    导入动态库要用尖括号

    2.2 创建数据库

    2.2.1 拼接数据保存沙盒路径

    将数据库文件保存在Document文件夹中,数据库文件名按你的需求写

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

    对沙盒不太熟悉的读者可以参考我上一篇博客iOS开发之沙盒机制

    2.2.2 创建数据库文件

    使用sqlite3_open()函数,该函数会打开指定路径数据库文件,如果该文件不存在 就会在该路径下创建数据库文件

        //创建sqlite3数据库句柄
        sqlite3 *ppDb = NULL;
    
        //参数1:待打开(创建)的数据库文件名 由于是sqlite3_open是c语言函数 需要将NSString类型的path转化为char *类型
        //参数2:sqlite3数据库句柄的指针
        //返回值: int类型 为0(SQLITE_OK)时表示创建成功
        int success = sqlite3_open(path.UTF8String, &ppDb);
    
        //判断创建是否成功
        if (success == SQLITE_OK) {
            NSLog(@"数据库创建成功");
    
            //输出数据库文件保存路径
            NSLog(@"数据库保存位置:%@",path);
        }else{
            NSLog(@"数据库创建失败");
        }
    
    

    2.3 创建表

    2.3.1 创建SQL语句

    对SQL语句不太了解的读者可以自行百度
    下面SQL语句意思是 如果t_student 表不存在,就创建一个名为t_student的表。这个表有三列。第一列列名为ID ,INTEGER(整形)类型,是主键,自动增长。第二列列名为name,TEXT(字符串)类型,不允许为空。第三列列名为score,REAL(浮点)类型,默认值是60.0

       NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student(ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, score REAL DEFAULT 60.0);";
    
    2.3.2 执行上面的SQL语句
       //创建并初始化错误信息指针
        char *errmsg = NULL;
    
        //调用sqlite3_exec()函数执行SQL语句
        //参数一:要打开的数据库句柄
        //参数二:要执行的SQL语句 由于是sqlite3_open是c语言函数 需要将NSString类型的sql转化为char *类型
        //参数三:回调函数 
        //参数四:回调函数的第一个参数
        //参数五:错误信息,是指向错误消息字符串的指针
        //返回值: int类型 为0(SQLITE_OK)时表示SQL语句执行成功
        int success_t = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);
    
        //判断表是否创建成功
        if (success_t == SQLITE_OK) {
            NSLog(@"表创建成功");
        }else{
            NSLog(@"表创建失败");
    
            //输出错误信息
           NSLog(@"错误信息:%s",errmsg);
        }
    

    2.4 在表中插入数据

    2.4.1 创建SQL语句

    下面SQL语句的意思是 向t_student表中插入一条数据,其中name字段的值为Allen,score字段的值为80.0

        NSString *sql = @"INSERT INTO t_student(name,score) VALUES('Allen',80.0);";
    
    2.4.2 执行SQL语句
        char *errmsg = NULL;
        int success_i = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);
        if (success_i == SQLITE_OK) {
            NSLog(@"数据插入成功");
        }else{
            NSLog(@"数据插入失败");
            NSLog(@"错误信息:%s",errmsg);
        }
    
    

    2.5 删除数据

    2.5.1 创建SQL语句

    这句SQL语句意思是 删除 t_student表中分数小于60的数据

        NSString *sql = @"DELETE FROM  t_student WHERE score < 60;";
    
    2.5.2 执行SQL语句
        char *errmsg = NULL;
        int success_d = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);
        if (success_d == SQLITE_OK) {
            NSLog(@"删除数据成功");
        }else{
            NSLog(@"删除数据失败");
            NSLog(@"错误信息:%s",errmsg);
        }
    

    2.6 修改数据

    2.6.1 创建SQL语句

    下面SQL语句的意思是 将t_student表中score = 80 的数据全部改成score = 90

        NSString *sql = @"UPDATE t_student SET score = 90 WHERE score = 80;";
    
    2.6.2 执行SQL语句
        char *errmsg = NULL;
        int success_d = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);
        if (success_d == SQLITE_OK) {
            NSLog(@"修改数据成功");
        }else{
            NSLog(@"修改数据失败");
            NSLog(@"错误信息:%s",errmsg);
        }
    

    2.7 查询数据

    2.7.1 创建SQL语句

    下面SQL语句的意思是 查询t_student表中 score > 80的所有数据

    NSString *sql = @"SELECT * FROM t_student WHERE score > 80";
    
    2.7.2 执行SQL语句
        //初始化Statement句柄
        sqlite3_stmt *ppStmt = NULL;
    
        /*
         使用 sqlite3_prepare_v2()函数执行SQL查询语句
         参数一:要查询的数据库句柄
         参数二:要执行的SQL语句,由于是sqlite3_open是c语言函数 需要将NSString类型的sql转化为char *类型
         参数三:这个函数能从SQL语句中读取的字节数的最大值,如果不限制SQL语句长度,填-1即可
         参数四:Statement句柄,保存最终结果
         参数五:保留字段
         返回值: int类型 为0(SQLITE_OK)时表示SQL语句执行成功
         */
        int success_s = sqlite3_prepare_v2(ppDb, sql.UTF8String, -1, &ppStmt, NULL);
    
    2.7.3 获取Statement句柄中保存的查询结果
        if (success_s == SQLITE_OK) {
            NSLog(@"数据查询成功");
    
            //遍历Statement句柄中的数据
            while (sqlite3_step(ppStmt) == SQLITE_ROW) {
                //获取当前行第0列的数据
                int ID = sqlite3_column_int(ppStmt, 0);
    
                //获取当前行第1列的数据
                const unsigned char *name = sqlite3_column_text(ppStmt, 1);
    
                //获取当前行第2列的数据
                double score = sqlite3_column_double(ppStmt, 2);
    
                //输出获取到的结果
                NSLog(@"ID = %d name = %s score = %lf",ID,name,score);
            }
        }else{
            NSLog(@"数据查询失败");
        }
    

    如果你有不同的见解 或文章有错误之处 希望能够指出 谢谢

    相关文章

      网友评论

        本文标题:iOS开发之SQLite

        本文链接:https://www.haomeiwen.com/subject/cmffbxtx.html