sqlite3_step() 似乎不起作用

sqlite3_step() doesn't seem to work

本文关键字:不起作用 step sqlite3      更新时间:2023-10-16

我有这个c++函数,用于检查给定的名称是否存在。但是每次它都会返回false,即使给定的名称已经存在。我哪里做错了?

bool Database::hasRepository(std::string repoName)
{
    string sql = "SELECT * FROM repository WHERE NAME='";
    sql += repoName + "'";
    sqlite3_stmt* selectStmt = nullptr;
    sqlite3_prepare_v2(connection, sql.c_str(), sql.size(), &selectStmt, NULL);
    int results = sqlite3_step(selectStmt);
    sqlite3_finalize(selectStmt);
    if(results == SQLITE_ROW)
        return true;
    else
        return false;
}

您应该检查所有可能返回错误指示的函数的返回值。例如,如果语句有语法错误,sqlite3_prepare_v2将返回一个错误代码。

这可能告诉您提供的语句不正确(如果是)。

您可以使用sqlite3_errmsgsqlite3_errstr来产生更可读的错误消息。丢掉关于错误的特定信息永远都不是一个好主意,例如,通过返回false,特别是在调试期间。