QSqlQuery未绑定值



我正在对MySQL数据库执行查询,并在整个应用程序中使用类似于下面的代码。但由于某种原因,下面的更新显示0行受到影响,而应该是1行。在深入挖掘时,我发现我的bindValue命令似乎没有任何效果。

QSqlQuery* query = new QSqlQuery(m_db)
query->prepare(QString("UPDATE companies SET "
"NAME=:name, "
"ISUSER=:isuser, "
"ISVAR=:isvar, "
"ISOEM=:isoem, "
"CONTACT=:contact, "
"EMAIL=:email, "
"COMMENTS=:comments "
"WHERE ID=:id "
"LIMIT 1"));
query->bindValue(":name",rowData.name);
query->bindValue(":isuser",rowData.isEndUser);
query->bindValue(":isvar",rowData.isVAR);
query->bindValue(":isoem",rowData.isOEM);
query->bindValue(":contact",rowData.contact);
query->bindValue(":email",rowData.email);
query->bindValue(":comments",rowData.comments);
query->bindValue(":id",id);
bool queryOk = query->exec();
if (queryOk) {
qDebug() << query->executedQuery();
qDebug() << query->lastQuery();
qDebug() << query->lastError().text();
qDebug() << rowsAffected;

上面的代码中一定有不同/错误的东西导致了下面的输出:

"UPDATE companies SET NAME=:name, ISUSER=:isuser, ISVAR=:isvar, ISOEM=:iSOEM, CONTACT=:contact, EMAIL=:email, COMMENTS=:comments WHERE ID=:id LIMIT 1"
"UPDATE companies SET NAME=:name, ISUSER=:isuser, ISVAR=:isvar, ISOEM=:iSOEM, CONTACT=:contact, EMAIL=:email, COMMENTS=:comments WHERE ID=:id LIMIT 1"
""
0

但我看不出有什么问题,查询也没有返回错误。然而,查询字符串似乎包含未被替换的变量名。

QSqlQuery::executedQuery()不会向您显示绑定值,因为绑定值的理念是它们永远不会成为查询本身的一部分(这完全消除了转义它们的问题(。您看到的是提交到数据库的实际查询。绑定值与查询字符串一起提交到数据库(与QSqlQuery非常相似(。

至于rowsAffected为零,我看不到它被您的示例中的代码初始化或更新,这可能就是它显示0的原因。您可能希望使用query->numRowsAffected()

最后(与您的任何问题无关(,您不需要在堆上分配QSqlQuery(除非您真的需要查询在创建它的范围之外生存(,只需在堆栈上分配即可。更少的动态分配==更少的内存泄漏机会:-(

相关内容

  • 没有找到相关文章

最新更新