Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QSqlQuery准备的SELECT语句在exec()上失败_Qt_Select_Exec_Prepared Statement - Fatal编程技术网

Qt QSqlQuery准备的SELECT语句在exec()上失败

Qt QSqlQuery准备的SELECT语句在exec()上失败,qt,select,exec,prepared-statement,Qt,Select,Exec,Prepared Statement,以下代码在QSqlQuery::exec()上失败。当我在没有prepared语句参数的情况下运行查询时,它会返回正确的结果,正如通过QSqlQuery::next() executedQuery()报告说,“:username”实际上没有被参数替换,而是被一个?替换(由于查询没有成功执行,应该是这样吗?) db是一个QSqlDatabase类变量,并且isOpen()报告true。Qt框架verison是4.7.3 DBSql::userInfo(const QString &user

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

executedQuery()
报告说,
“:username”
实际上没有被参数替换,而是被一个
替换(由于查询没有成功执行,应该是这样吗?)

db
是一个QSqlDatabase类变量,并且
isOpen()
报告
true
。Qt框架verison是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();
    }
  }
}
DBSql::userInfo(const QString和username,
QString和passwd,
q字符串和名称,
用户权限(priv)
{
QSqlQuery用户查询(db_2;);
const QString userStr(“选择u.id、u.fullname、u.password、p.description\
来自用户的u内部加入权限p ON u.privilege\u id=p.id\
其中u.username=:username“;
userQuery.bindValue(“:username”,username);
如果(!userQuery.prepare(userStr))

std::cout您必须在
userQuery->bindValue(“:username”,username)
之前调用
userQuery->prepare(userStr)
尝试在绑定值之前调用prepare方法您正在泄漏您的QSqlQuery资源。您可能应该使用一个简单的自动变量:
QSqlQuery userQuery(db)
已编辑,谢谢。它最初不是用堆分配编写的,但我尝试这样做,作为一种不顾一切的最后手段,以查看行为是否发生了变化。您是对的,先生。已确认。:)我如何投票支持您的答案?它说我需要15个声誉才能这样做。