SQLite3中的callback回调函数注意的细节

调用

cpp 复制代码
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

该例程提供了一个执行 SQL 命令的快捷方式,
SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。
在这里,

第一个参数 sqlite3 是打开的数据库对象,
第二个 sqlite_callback 是一个回调,data 作为其第一 个参数,
errmsg 将被返回用来获取程序生成的任何错误。
sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。

======================================================================

cpp 复制代码
 int callback(void *arg, int column_size, char *column_value[], char *column_name[])
 参数分析:void *arg:是sqlite3_exec函数的第四个参数 
column_size:数据库的字段数(学号,名字,分数,性别。共四个字段数) 
column_value[]:列的值() (对应的字段数的值是多少)
column_name:字段名字(学号的字段名为ID,名字的字段名为Name,以此类推)

========================================================================

数据库(共3条数据,每条数据都有4个字段):

=========================================================================

return 0

不加return 0(写return 1 也只返回一次 )

测试实例:

cpp 复制代码
#include <stdio.h>
#include <sqlite3.h>
int callback(void *arg, int column_size, char *column_value[], char
*column_name[])
{
    int i;
    printf("arg=%s\n",(char *)arg);

    for(i=0;i<column_size;i++){
    printf("%s = %s\n", column_name[i], column_value[i]);
    }
    printf("=======================\n");
    return 0;//必须返回0,这样数据库中有多少条数据,这个回调函数就会被调用多少次
}
int main(char argc, char **argv)
{
    sqlite3 *db;
    char *errorMes = NULL;
    int ret;
    if(argc < 2){
    printf("Usage: %s xxx.db\n",argv[0]);
    return -1;
}
    if( (ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
    printf("open %s success\n",argv[1]);
}else{
    printf("error:%s,%d\n",sqlite3_errmsg(db),ret);
    if(ret == 14){
    printf("permission den\n");
    }
return -1;
}
//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char
**errmsg)
    sqlite3_exec(db, "select * from stu;",callback, "content of sql:",
&errorMes);//errorMes may sigment error!
    sqlite3_close(db);
    printf("done\n");
    return 0;
}

加了return 0;

不加return 0

相关推荐
名字还没想好☜1 分钟前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
geovindu2 分钟前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
NWU_LK6 分钟前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库
一只小菜鸡..8 分钟前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
叶总没有会14 分钟前
3.2 构建AI智能体项目扩展知识
java·数据库·人工智能·spring·ai
Lakers-2415 分钟前
1987年6月10日晚上23-24点出生性格、运势和命运
java
唐青枫17 分钟前
Java Jetty 实战详解:从嵌入式 HTTP 服务到 Spring Boot 容器替换
java
YOU OU8 小时前
Redis基础常识与命令
数据库·redis·缓存
腻害兔9 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社10 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言