我有一个像这样的小功能
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?
发布于 2016-08-05 14:16:09
您的问题是,您试图从具有特殊(在某些地方无效)名称count(*)的列中获取结果。您可以为该列设置别名,并使用该列别名获取值:
...
mDb->prepareSqlQuery("SELECT count(*) as count FROM mytable WHERE userid=:userId;", "database");
...
QVariant c = mDb->sqlQuery().value("count");
...检查错误状态的返回值也是很好的实践.
https://stackoverflow.com/questions/38752111
复制相似问题