QSqlQuery编写的SELECT语句在exec()上失败

时间:2012-11-09 10:41:34

标签: qt select exec prepared-statement

以下代码在QSqlQuery::exec()上失败。当我在没有预准备语句参数的情况下运行查询时,它会返回正确的结果,可以通过QSqlQuery::next()

获得。

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();
    }
  }
}

1 个答案:

答案 0 :(得分:6)

您必须在userQuery->prepare(userStr)

之前致电userQuery->bindValue(":username", username)