sqlite3_exec及其回调函数

一)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及其回调函数
现在我们用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;
}

程序运行结果:

sqlite3_exec及其回调函数

Original: https://blog.csdn.net/weixin_51281362/article/details/121065724
Author: xiongsiyu979
Title: sqlite3_exec及其回调函数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815371/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球