iOS数据库操作(基于C语言API)

表创建

sqlite3 *db;
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES).firstObject;
    const char *cpath = [path UTF8String];
    if (sqlite3_open( cpath,&db) != SQLITE_OK){
        sqlite3_close(db);
        NSAssert(NO, @"数据库打开失败");
    }else{

        char *err ;
        if (sqlite3_exec(
                     db,
                     [@"CREATE TABLE IF NOT EXISTS t_test(name TEXT PRIMARY KEY, sex TEXT NOT NULL);" UTF8String],
                     NULL,
                     NULL,
                         &err) != SQLITE_OK){
            sqlite3_close(db);
            printf("%s",err);
            NSAssert(NO, @"表创建失败");
        }

        NSLog(@"表创建成功");
        sqlite3_close(db);

    }

查询数据

操作步骤:

- 1 使用sqlite3_open 函数打开数据库
- 2 使用sqlite3_prepare_v2函数预处理SQL语句
- 3 使用sqlite3_bind_text函数绑定参数
- 4 使用sqlite3_step函数执行SQL语句,便利结果集
- 5 使用sqlite3_column_text等函数提取字段数据
- 6 使用sqlite3_finalize和sqlite3_close函数释放资源

 if (sqlite3_open(cpath, &db) != SQLITE_OK){
        sqlite3_close(db);
        NSAssert(NO, @"数据库打开失败");
    }else{
        NSString *sql = @"SELECT name, sex FROM t_test where name = XXX ";
        //ORDER BY name DESC降序
        //ORDER BY name ASC 升序排列
        const char *csql = [sql UTF8String];

        sqlite3_stmt *statement;

            //预处理
        if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK){//将SQL语句编译为二进制代码,提高SQL语句的额执行速度,第三个参数代表全部SQL字符串的长度,第四个参数是sqlite3_stmt指针的地址,第五个参数是SQlite语句没有执行的部分语句


            const char *cname = [@"jason" UTF8String];

            sqlite3_bind_text(statement, 1, cname, -1, NULL);//用于绑定SQL语句的参数,第二个参数为序号(从1开始),第三个参数为字符串值,第四个参数为字符串长度,第五个参数为一个函数指针<如果SQL语句中带有问号(即占位符),那么就要绑定参数>

            if (sqlite3_step(statement) == SQLITE_ROW){//返回值为SQLITE_ROW说明还有没有遍历的行
                char *cname = (char *)sqlite3_column_text(statement, 0);//提取字段数据,高函数用来读取字符串类型的字段,第二个参数用于指定select字段的索引(从0开始)
                /* 类似的函数
                 sqlite3_column_blob()
                 sqlite3_column_doubleb()
                 sqlite3_column_int()
                 sqlite3_column_int64()
                 sqlite3_column_text()
                 sqlite3_column_text16()
                 */
                char *csex = (char *)sqlite3_column_text(statement, 1);

                NSString *name = [[NSString alloc] initWithUTF8String:cname];
                NSString *sex = [[NSString alloc] initWithUTF8String:csex];
                NSLog(@"===%@,sex == %@",name, sex);
            }
        }
        sqlite3_finalize(statement);//释放资源
        sqlite3_close(db);
    }

修改数据

操作步骤

- 1使用sqlite3)_open代开数据库
- 2 使用sqlite3_prepare_v2函数预处理SQL语句
- 3 使用sqlite3_bind_text函数绑定参数
- 4 使用sqlite3_step函数执行SQL语句
- 5 使用sqlite3_finalize和sqlite3_close韩式释放资源(与查询相比,少了提取字段的过程)

      //修改数据
    if (sqlite3_open(cpath, &db) != SQLITE_OK){
        sqlite3_close(db);
        NSAssert(NO, @"数据库打开失败");
    }else{
        NSString *sql = @"INSERT OR REPLACE INTO t_test(name, sex) VALUES(?,?)";
        //"UPDATE t_test set name = ? WHERE name = ?"
        const char *csql = [sql UTF8String];

        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK ){
            const char *name = [@"jason" UTF8String];
            const char *sex = [@"girl" UTF8String];

            sqlite3_bind_text(statement, 1, name, -1, NULL);
            sqlite3_bind_text(statement, 2, sex, -1, NULL);

            if (sqlite3_step(statement) != SQLITE_DONE){//代表执行完成
                NSAssert(NO, @"插入数据失败");
            }
        }
        sqlite3_finalize(statement);
        sqlite3_close(db);
    }

删除数据 和修改数据类似,只是SQL语句不同

        //修改数据
    if (sqlite3_open(cpath, &db) != SQLITE_OK){
        sqlite3_close(db);
        NSAssert(NO, @"数据库打开失败");
    }else{
        NSString *sql = @"DELETE FROM t_test WHERE NAME = ?";
        const char *csql = [sql UTF8String];

        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK ){
            const char *name = [@"jason" UTF8String];
            const char *sex = [@"girl" UTF8String];

            sqlite3_bind_text(statement, 1, name, -1, NULL);
            sqlite3_bind_text(statement, 2, sex, -1, NULL);

            if (sqlite3_step(statement) != SQLITE_DONE){//代表执行完成
                NSAssert(NO, @"删除数据失败");
            }
        }
        sqlite3_finalize(statement);
        sqlite3_close(db);
    }

demo地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值