以下代码在QSqlQuery::exec()
上失败。当我运行没有准备好的声明参数查询,它返回正确的结果,可作为一个期望通过QSqlQuery::next()
QSqlQuery准备SELECT语句在exec()上失败
executedQuery()
报道说":username"
实际上不是由参数所取代,但有?
(是否应该,因为查询没有成功执行?)。
db_
是一个QSqlDatabase类变量和isOpen()
报告true
。 Qt框架版本是4.7.3。
DBSql::userInfo(const QString &username,
QString &passwd,
QString &name,
UserPriv priv)
{
QSqlQuery userQuery(db_);
const QString userStr("SELECT u.id, u.fullname, u.password, p.description \
FROM users u INNER JOIN privilege p ON u.privilege_id = p.id \
WHERE u.username = :username");
userQuery.bindValue(":username", username);
if (!userQuery.prepare(userStr))
std::cout << "prepare failed" << std::endl;
if (userQuery.exec()) {
while (userQuery.next()) {
userId = userQuery.value(0).toInt();
name = userQuery.value(1).toString();
passwd = userQuery.value(2).toString();
const QString privilegeDesc = userQuery.value(3).toString();
}
}
}
尝试结合价值 – Furkan
你泄露你的QSqlQuery资源之前调用准备方法。你应该使用一个简单的自动变量:'QSqlQuery userQuery(db _);'编辑 – octal
,谢谢。它最初不是用堆分配编写的,但我试图将它看作是一种绝望的最后手段,以查看行为是否改变。 –