我有一个像这样的小功能
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中执行此命令时,结果如下所示
我只想在下面进行值2
进行比较,但在我调试的代码中,QVariant c
始终返回无效,因此e is always = 0
。我以为我的SQL命令没有激活,但是当我调试时,bool d
总是返回true。你们知道为什么吗?我如何按预期收到2
?
答案 0 :(得分:0)
您的问题是,您尝试从具有特殊(在某些地方无效)名称count(*)
的列中获取结果。您可以为列设置别名,并使用该列别名获取值:
...
mDb->prepareSqlQuery("SELECT count(*) as count FROM mytable WHERE userid=:userId;", "database");
...
QVariant c = mDb->sqlQuery().value("count");
...
检查返回值的错误状态也是很好的做法......