
【全志H616开发】使用sqlite3_exec函数操作SQLite数据库
回调函数 callback 在 SQLite 中用于处理 sqlite3_exec 执行 SQL 查询后返回的结果集。每当查询返回一行数据时,SQLite 都会调用一次这个回调函数。通过回调函数sqlite3_exec 是 SQLite 数据库库中的一个函数,用于执行一条或多条 SQL 语句。
·
sqlite3_exec函数介绍
sqlite3_exec 是 SQLite 数据库库中的一个函数,用于执行一条或多条 SQL 语句。这个函数的原型是:
int sqlite3_exec(
sqlite3*,
const char *sql,
int (*callback)(void*,int,char**,char**),
void *,
char **errmsg
);
参数
- sqlite3*: 这是一个指向数据库连接对象的指针。这个指针是通过 sqlite3_open 或相关函数获得的。
- const char *sql: 这是一个 C 字符串,包含要执行的 SQL 语句。如果包含多条 SQL 语句,它们应该用分号分隔。
- int (callback)(void,int,char**,char**):
这是一个指向回调函数的指针。这个函数将在每一行结果产生时被调用。如果不需要回调函数,可以传递 NULL。 - void *: 这是传递给回调函数的第一个参数。如果不需要,可以传递 NULL。
- char **errmsg:
这是一个指向错误消息字符串的指针的指针。如果执行过程中发生错误,错误消息字符串将被存储在这个位置。调用者需要在使用完后释放这个字符串。
返回值
这个函数返回一个整数,表示操作的结果。常见的返回值包括:
- SQLITE_OK(0):表示操作成功。
- 其他错误代码:表示操作失败。错误代码的定义可以在 SQLite 的官方文档中找到。
callback回调函数
回调函数 callback 在 SQLite 中用于处理 sqlite3_exec 执行 SQL 查询后返回的结果集。每当查询返回一行数据时,SQLite 都会调用一次这个回调函数。通过回调函数,用户可以处理查询结果,例如打印结果或存储到数据结构中。
int callback(void *data,
int argc,
char **argv,
char **azColName);
- *arg :是sqlite3_exec函数的第四个参数
- data column_size :数据库的字段数(就是name sec num 这些类型有几个)
- column_value[] :列的值(就是对应的name secscore 对应的值)
- column_name :字段名字(就是name sec score的这些名字)
代码示例
功能描述
如果表不存在,则创建表,如果存在,不创建表,并插入数据:211,‘sun’,99,
再借用回调函数输出数据信息。
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.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],(char *)column_value[i]);
}
printf("========================\n");
return 0 ;// 数据库中有几条数据它回调函数就会调用几次
}
int main(int argc,char **argv)
{
sqlite3 *db = NULL;
int ret = 0;
char *errmsg; //sqlite3_exec函数会自动分配地址,记得free
if(argc<2){
printf("Uage: %s xxx.db\n",argv[0]);
exit(-1);
}
if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("ret = %d create %s success\n",ret,argv[1]);
}else{
printf("ret = %d creat %s fail\n",ret,argv[1]);
printf("error num = %d error mesg:%s\n",sqlite3_errcode(db),sqlite3_errmsg(db));
if(ret==14){
printf("permisson deny\n");
}
exit(-1);
}
ret = sqlite3_exec(db,"create table class1(id Integer,name char,score Integer);", \
callback,"into callback",&errmsg);
printf("ret = %d error message %s\n",ret,errmsg);
sqlite3_exec(db,"insert into class1 values(211,'sun',99);", \
callback,"into callback",&errmsg);
sqlite3_exec(db,"select * from class1", \
callback,"into callback",&errmsg);
sqlite3_free(errmsg);
printf("Done\n");
sqlite3_close(db);
return 0;
}
更多推荐
所有评论(0)