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的沙盒中创建一个数据库
技术分享

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

表字段都已经创建好了,现在就可以愉快的进行数据库操作了
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);
    }


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。