如何知道 sqlite 中的函数"回调"是否返回了一些东西?
How to know if function 'callback' in sqlite returned something?
例如,我在SQL中的查询(问题?)是:
SELECT * from COMPANY where imie="John",surname="Wattson",age=31;
我使用sqlite3_exec
其中一个参数是callback
.我不知道这条记录是否在我的表格中,并希望使用sqlite_exec
来了解它。
我该怎么办? 对不起我的英语。:(
如果您只想查看表中是否存在记录,那么您可以使用如下所示的回调函数sqlite3_exec()
来完成:
int myCallback(void *pUser, int argc, char **colData, char **colNames) {
int *flag = (int*)pUser;
*flag = 1;
return 1;
}
这是因为如果没有与查询匹配的记录,则不会调用回调函数。通过返回 1 而不是 0,我们告诉 SQLite 我们不希望查询结果中有更多的行。
然后,在进行数据库查询的函数中:
std::string sql = "SELECT * FROM COMPANY WHERE imie='John' AND surname='Wattson' AND age=31;";
char *pSql = sql.c_str(); // char*'s are better for talking to SQLite, and prior to C++14,
// a std::string is not guaranteed to be sequential in memory,
// so 'sql[0]' may not work right
char *pError = NULL;
int fHasResult = 0;
// db is an already-opened sqlite3*
int result = sqlite3_exec(db, pSql, myCallback, &fHasResult, &pError);
if (result) {
cout<<"Error was: "<<pError;
free(pError);
}
if (fHasResult) {
cout<<"The row exists in the database.";
}
else {
cout<<"The row does not exist in the database.";
}
您可以使用EXISTS
,然后您的查询应如下所示;SELECT EXISTS (SELECT * FROM COMPANY WHERE imie="John" AND surname="Wattson" AND age=31);
对于另一个例子,你可以看看这个;
用于检查 SQLite3 中是否存在行的有效查询
相关文章:
- 架构决策:返回std::future还是提供回调
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- C++ 线程端回调并返回结果
- 具有返回类型的回调函数
- 在 winapi 回调函数上返回 FALSE 时出现意外行为(循环被跳过?
- 如何知道 sqlite 中的函数"回调"是否返回了一些东西?
- 是否可以在C 中使回调函数返回值
- C++-17变量模板:捕获回调参数的返回类型和参数类型
- 带有lambda的C++回调失败,返回bad_function_call
- 一个回调函数应该如何更新/返回值
- 未知类方法回调,它接受 0 个参数并返回可转换为 int 的类型
- C++,pthread和静态回调。 "this" 返回一个指针,指向派生的基类(第 2 部分)
- 在返回值和"回调"之间做出决定时的样式与一致性
- WNDPROC窗口回调过程中接收到的句柄与CreateWindow返回的句柄之间的差异
- 在异步API (c++)中,如何保证API在调用回调之前返回
- Boost Python回调返回auto_ptr删除对象
- 如何正确地从c++引擎返回回调到obj-c程序
- Winapi定时器回调线程,永远不会返回
- Curl 的CURLOPT_XFERINFOFUNCTION回调返回 dlnow > dltotal
- 如何在c++中设置函数返回时执行回调?