一)sqlite3_exec
1.头文件和函数原型
#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*
是打开的数据库;
第二个参数 const char *sql
是要执行的sql语句;
第三个参数 int (*callback)(void*para,int argc,char**argv,char**argv_name)
是回调函数;
第四个参数 void *para
是传递给回调函数的参数
第五个参数 char **errmsg
是如果sqlite3_exec函数执行发生错误返回的错误信息;
执行成功返回SQLITE_OK (0),否则返回其他值。
二)sqlite3_exec回调函数
回调函数是用户自定义的,格式如下:
int callback(void*para,int argc,char**argv,char**argv_name)
{
}
说明:
第一个参数 void*para
是sqlite3_exec传给回调函数的参数;
第二个参数 int argc
是执行sqlite3_exec的sql语句后sqlite3的shell环境打印的字段数目;
第三个参数 char**argv
是字段的值(字符串类型);
第四个参数 char**argv_name
是字段的名称。
三)判断数据库中是否存在表
在sqlite3的shell环境中执行下面的命令和sql语句可以看到test.db数据库中存在表test_table。
现在我们用sqlite3_exec及其回调函数来判断test_table是否存在于test.db数据库中
#include
#include
#include
#include "sqlite3.h"
#define MAX_BUF_SIZE 1024
int callback(void *para, int argc, char **argv, char **argv_name)
{
int i;
for(i=0; i<argc; i++)
*(int *)para = atoi(argv[i]);
return 0;
}
int main(int argc, char *argv[])
{
sqlite3 *db = NULL;
char *zErrMsg = NULL;
int result = -1;
char sql_ifexis[MAX_BUF_SIZE];
if(sqlite3_open("test.db", &db) != SQLITE_OK)
{
printf("can't open database: %s\n", sqlite3_errmsg(db));
return -1;
}
zErrMsg = NULL;
memset(sql_ifexis, 0, sizeof(sql_ifexis));
snprintf(sql_ifexis, sizeof(sql_ifexis), "SELECT count(*) FROM sqlite_master WHERE type='table' AND name='%s';", "test_table");
sqlite3_exec(db, sql_ifexis, callback, &result, NULL);
if(result == 1)
{
printf("table existence!\n");
}
else if(result == 0)
{
printf("table not existence!\n");
}
return 0;
}
程序运行结果:
Original: https://blog.csdn.net/weixin_51281362/article/details/121065724
Author: xiongsiyu979
Title: sqlite3_exec及其回调函数
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815371/
转载文章受原作者版权保护。转载请注明原作者出处!