sqliteiOS开发之SQLite

1.SQLite简介

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(@"数据查询失败");
    }

一经你发两样的见解 或小说有左的处 希望能够提出 谢谢

网站地图xml地图