天天看点

IOS SQLite3的使用

一、什么是SQLIte      SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快 二、数据库存储数据的步骤 1、新建一个数据库 2、新建一张表(table) 3、添加多个字段(column,列,属性) 4、添加多行记录(row,每行存放多个字段对应的值 三、SQL语句种类 1、数据定义语句(DDL:Data Definition Language) 包括create和drop等操作 在数据库中创建新表或删除表(create table或 drop table)

2、数据操作语句(DML:Data Manipulation Language) 包括insert、update、delete等操作 上面的3种操作分别用于添加、修改、删除表中的数据

3、数据查询语句(DQL:Data Query Language) 可以用于查询获得表中的数据 关键字select是DQL(也是所有SQL)用得最多的操作 其他DQL常用的关键字有where,order by,group by和having

三、SQLite的字段类型 integer : 整型值 real : 浮点值 text : 文本字符串 blob : 二进制数据(比如文件) 实际上SQLite是无类型的,但为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好还是加上每个字段的具体类型

四、SQLite的使用 1、在IOS中使用SQLite3时,首先需要添加库文件libsqlite3.dylib和导入主头文件 #import <sqlite3.h>

创建数据库

// 拼接数据库地址
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *sqlFile = [path stringByAppendingPathComponent:@"student.sqlite"];
    // 打开数据
    int result = sqlite3_open(sqlFile.UTF8String, &_db);
打开数据库会返回一个int类型的返回值,通过该值可以判断创建数据库是否成功
     // 判断是否打开成功
    if (result == SQLITE_OK) {
        NSLog(@"打开成功");
        // 创建表
        /*
         第一个参数: 需要执行SQL语句的数据库对象
         第二个参数: 需要执行的SQL语句
         第三个参数: 回调函数
         第四个参数: 第三个参数的参数
         第五个参数: 接收错误信息
         */
                    // 创建表的sql语句
        NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, age INTEGER, score REAL);";
        result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
        if (result == SQLITE_OK) {
            NSLog(@"创建表成功");
        }else
        {
            NSLog(@"创建表失败");
        }
    }else
    {
        NSLog(@"打开失败");
    }
           

以上的代码执行完,就会在app的沙盒中创建一个数据库

IOS SQLite3的使用

该数据库可以用一个叫NaviCat Premium的软件打开,如下

IOS SQLite3的使用

表字段都已经创建好了,现在就可以愉快的进行数据库操作了 2、插入数据

NSString *sql = @"INSERT INTO t_student(age, score, name) VALUES ('28', 100, 'jonathan');";
    int result =  sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"插入成功");
    }
           

3、修改数据

NSString *sql = @"UPDATE t_student SET name = 'LNJ';";
    int result =  sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"修改成功");
    }
           

4、删除数据

NSString *sql = @"DELETE FROM t_student WHERE id = 1; ";
    int result =  sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    }
           

5、查询数据 sqlite3 操作中 , 所有 DML 语句都是使用 sqlite3_exec 函数执行 SQL 语句即可 , 但是如果是需要查询数据库, 不能使用sqlite3_exec, 因为它并没有返回查询到得结果发给我们

NSString *sql = @"SELECT * FROM t_student;";
    sqlite3_stmt *stemt = NULL;
    /*
     第一个参数:需要执行SQL语句的数据库
     第二个参数:需要执行的SQL语句
     第三个参数: 告诉系统SQL语句的长度, 如果传入一个小于0的数, 系统会自动计算
     第四个参数:结果集, 里面存放所有查询到的数据(不严谨)
     */
    sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stemt, NULL);
    // 判断有没有查询结果
    while (sqlite3_step(stemt) == SQLITE_ROW) {
        // 取出第一个字段的查询得结果
        const unsigned char *name = sqlite3_column_text(stemt, 1);
        // 取出第一个字段的查询得结果
        int age = sqlite3_column_int(stemt, 2);
        // 取出第一个字段的查询得结果
        double score = sqlite3_column_double(stemt, 3);
        NSLog(@"%s %d %f", name, age, score);
    }