QVariant返回无效,同时该值有效

时间:2016-08-03 19:28:20

标签: c++ qt qsqlquery qvariant

我有一个像这样的小功能

bool QcgDatabase::onceindb(const QString& userId)
{
    mDb->prepareSqlQuery("SELECT count(*) FROM mytable WHERE userid=:userId;", "database");
    mDb->prepareBindValue(":userId", userId);
    mDb->sqlExec();

    bool d = mDb->sqlQuery().isActive();
    QVariant c = mDb->sqlQuery().value(QString("count(*)"));
    int e = c.toInt();

    if (e == 1) {
        return true;
    }
    else {
        return false;
    }
}

当我在SQL中执行此命令时,结果如下所示

sql

我只想在下面进行值2进行比较,但在我调试的代码中,QVariant c始终返回无效,因此e is always = 0。我以为我的SQL命令没有激活,但是当我调试时,bool d总是返回true。你们知道为什么吗?我如何按预期收到2

1 个答案:

答案 0 :(得分:0)

您的问题是,您尝试从具有特殊(在某些地方无效)名称count(*)的列中获取结果。您可以为列设置别名,并使用该列别名获取值:

...
mDb->prepareSqlQuery("SELECT count(*) as count FROM mytable WHERE userid=:userId;", "database");
...
QVariant c = mDb->sqlQuery().value("count");
...

检查返回值的错误状态也是很好的做法......