我正在尝试构建一个函数来确定查询是否返回{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;")) {
...
}
3条答案
按热度按时间gdx19jrr1#
当查询在空集上运行时,它不会返回{null},而是返回一个包含
NULL
值的一列和一行的结果表。您必须获取该行的值以确定它是否为NULL
。(And忘记调用sqlite3_finalize()。)
此外,您不应该仅仅为了确定结果是否为空而执行查询 * 两次 *。
db.query
函数应该正确处理NULL
值。下面是一个期望返回单个数字(如
MAX
查询)或NULL
的查询的函数:(If
-1
不能是有效的返回值,您不需要resultIsValid
参数。)am46iovg2#
当SQL语句成功执行时,
sqlite3_prepare_v2
将返回SQLITE_OK
。d7v8vwbk3#
通常情况下,您会检查SQLITE_OK(按照sqlite docs)。如果响应不是SQLITE_OK,那么您将调用sqlite3_errmsg(数据库)来发现错误。
显然,如果没有错误,那么可以使用sqlite3_step(statement)单步执行查询结果行