Sqlite3之sqlite3_exec()的执行原理

一、sqlite3_exec()使用说明

用于在C语言中访问数据库的一条语句;

增删改没有返回值,可以不用写回调函数;

查询会返回查询结果,需要调用回调函数对返回值进行处理 ,每当查询一行结果后,就会产生一条事件,接收到事件后就会调用对应的回调函数。

二、sqlite3_exec()原型

SQLITE_API int sqlite3_exec(
  sqlite3*,                                  /* 数据库的句柄 */
  const char *sql,                           /* 调用数据库的语句 */
  int (*callback)(void*arg , int col , char** str , char** name),  /* 回调函数 */
  void *arg,                                    /* 传递给回调函数的参数 */
  char **errmsg                              /* 错误信息 */
);

 假设查询到的数据为:1        ‘hukun’        2106701        21 

1.col:表示返回数据的第几列,如2106701在第2列

2.name:表示当前列的列名,如2106701的列名为班级

3.str:当前列的具体值,如第二列的值为2106701

三、回调函数的例程

int callback(void *arg,int col,char **str,char **name){
    for(int i=0;i<col;i++){//仅打印一行数
        printf("%s:%s " , name[i] , str[i]);//对每一列进行处理
    }
    printf("\n");
    return SQLITE_OK;
}

注:*回调函数的函数说明一定要与sqlite3_exec()指定的格式相同。

        *sqlite3_exec()根据回调函数的返回值,来判断是否继续查询,所以每次的调用回调函数都要返回SQLITE_OK,表示接着查询。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
sqlite3_exec()函数是SQLite库中最常用的函数之一,它用于执行SQL语句并调用回调函数处理结果。下面是sqlite3_exec()函数的详细解释: 1. 头文件和函数原型 ```c #include "sqlite3.h" int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*para,int argc,char**argv,char**argv_name), void *para,char **errmsg) ``` 2. 参数说明 - sqlite3*:SQLite数据库连接对象。 - sql:要执行的SQL语句。 - callback:回调函数,用于处理SQL语句执行结果。 - para:传递给回调函数的参数。 - errmsg:如果执行SQL语句出错,将错误信息存储在此处。 3. 回调函数 回调函数是sqlite3_exec()函数的一个重要参数,用于处理SQL语句执行结果。回调函数的原型如下: ```c int callback(void *para, int argc, char **argv, char **argv_name); ``` - para:sqlite3_exec()函数中传递给回调函数的参数。 - argc:结果集中的列数。 - argv:结果集中的一行数据。 - argv_name:结果集中每一列的列名。 回调函数返回一个整数值,用于告诉sqlite3_exec()函数是否继续执行SQL语句。如果回调函数返回0,则继续执行SQL语句;如果返回非0值,则停止执行SQL语句。 4. 示例 下面是一个使用sqlite3_exec()函数执行SQL语句的示例: ```c #include <stdio.h> #include <stdlib.h> #include <sqlite3.h> int callback(void *para, int argc, char **argv, char **argv_name) { int i; for (i = 0; i < argc; i++) { printf("%s = %s\n", argv_name[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char **argv) { sqlite3 *db; char *errmsg = 0; int ret; ret = sqlite3_open("test.db", &db); if (ret != SQLITE_OK) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } ret = sqlite3_exec(db, "SELECT * FROM test", callback, 0, &errmsg); if (ret != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", errmsg); sqlite3_free(errmsg); } sqlite3_close(db); return 0; } ``` 以上代码打开了一个名为test.db的SQLite数据库,并执行了一条SELECT语句,将结果集传递给回调函数callback()处理。在回调函数中,我们遍历了结果集中的每一行数据,并输出了每一列的列名和值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耀锋芒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值