gpt4 book ai didi

C++ SQLite 确定查询结果是否为 {null}

转载 作者:行者123 更新时间:2023-11-28 03:14:29 24 4
gpt4 key购买 nike

我正在尝试构建一个函数来确定查询是否返回 {null}。由于某种原因,它总是返回 false。我做错了什么?

bool CC_Database::checkNullQuery(string query)
{
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(database, query.c_str(), -1, &statement, 0) == SQLITE_NULL)
{
cout << "null" << endl;
return true;
} else {
cout << "not null" << endl;
return false;
}
}

调用函数的代码

if (!db->checkNullQuery("SELECT MAX(Inventory_ID) FROM Inventory;")) {
...
}

最佳答案

当您的查询在一个空集上运行时,它不会返回 {null},而是一个包含 NULL 值的一列和一行的结果表。您必须获取该行的值以确定它是否为 NULL

(而且你忘了调用 sqlite3_finalize()。)

此外,您不应该为了确定结果是否为空而执行查询两次。您的 db.query 函数应该正确处理 NULL 值。

以下是一个需要返回单个数字(如您的 MAX 查询)或 NULL 的查询的函数:

int CC_Database::singleNumberQuery(const string& query, bool& resultIsValid)
{
sqlite3_stmt *stmt;
int result;

resultIsValid = false;

int rc = sqlite3_prepare_v2(database, query.c_str(), -1, &stmt, NULL);
if (rc != SQLITE_OK) {
printf("error: %s\n", sqlite3_errmsg(database));
// or throw an exception
return -1;
}

rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE && rc != SQLITE_ROW) {
printf("error: %s\n", sqlite3_errmsg(database));
// or throw an exception
sqlite3_finalize(stmt);
return -1;
}

if (rc == SQLITE_DONE) // no result
result = -1;
else if (sqlite3_column_type(stmt, 0) == SQLITE_NULL) // result is NULL
result = -1;
else { // some valid result
result = sqlite3_column_int(stmt, 0);
resultIsValid = true;
}

sqlite3_finalize(stmt);

return result;
}

(如果-1不是有效的返回值,则不需要resultIsValid参数。)

关于C++ SQLite 确定查询结果是否为 {null},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374213/

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