如何知道 sqlite 中的函数"回调"是否返回了一些东西?

How to know if function 'callback' in sqlite returned something?

本文关键字:返回 回调 sqlite 何知道 函数 是否      更新时间:2023-10-16

例如,我在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 中是否存在行的有效查询