gpt4 book ai didi

c++ - 如何使用 sqlite3_exec 从 sqlite3 数据库中选择数据到变量中?

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:32 24 4
gpt4 key购买 nike

互联网上有一百万个示例详细说明了如何使用 sqlite3_exec 从表中选择行并使用此回调函数打印它们:

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}

这是实现回调的代码:

[...]
rc = sqlite3_exec(db, sql, callback, &nrecs, &zErrMsg);
[...]

现在,我假设将获取的数据用于除打印之外的其他用途将是一个相当标准的场景,但就我的生活而言,我无法找到这应该如何完成。

我想做的是获取包含两列的一行(argc 将为 1)并具有这两个值(argv[0]argv [1]) 从执行 sqlite3_exec 的地方访问。

我想这与 void *NotUsed 有关。 (这个指针到底指向什么,为什么所有的例子都坚持不使用它?)

如果有人能帮我解决这个问题,我将不胜感激。如果你也能向我解释为什么这个看似微不足道的任务变得如此复杂,你就会得到我永恒的爱。 (获取的数据在从另一个函数调用的静态函数中处理。这有效地扼杀了使用面向对象语言的目的,对吧?)

最佳答案

'key'是sqlite3_exec的第四个参数。

通常情况是这样的:你有这个你想用 sqlite 查询填充的结构:

struct xyz_t
{
int a ;
int b ;
} ;

然后你像这样调用 sqlite3_exec:

//fill in query text
xyz_t xyz; // struct you want to fill
sqlite3_exec(db, sql, callback, &xyz, &zErrMsg);

回调会这样做:

static int callback(void *veryUsed, int argc, char **argv, char **azColName){
int i;
xyz_t *xyz = (xyz_t *)veryUsed ;
for(i=0; i<argc; i++){
if (strcmp(azColName[i], "a") == 0)
xyz->a = atoi(argv[1]) ;
else if ...
}
return 0;
}

您甚至可以在每次调用时传递一个 std::vector 和 push_back 一个新的 xyz_t。对于 C++ 程序员来说不太好,但这是一个混合的 C/C++ 世界...

关于c++ - 如何使用 sqlite3_exec 从 sqlite3 数据库中选择数据到变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31030047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com