【问题标题】:Qt QSqlQuery bindValue works with ? but not with :placeholdersQt QSqlQuery bindValue 适用于?但不是 :placeholders
【发布时间】:2014-01-14 04:17:03
【问题描述】:

我正在使用 SQLite,插入到表中。跟风

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(?)"));
testQuery.bindValue(0, someQStringObg);
testQuery.exec();

有效,但是

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(:val)"));
testQuery.bindValue(":val", someQStringObg);
testQuery.exec();

不要。 testQuery.lastError().text() 返回 No query Unable to fetch row

不知道为什么会这样,但真的很想知道。

【问题讨论】:

  • 您使用的是哪种sql类型和版本?哪个Qt版本?哪个操作系统,哪个版本?您是否尝试过显式调用 .prepate() 来查看返回值?另外,你把“?”混在一起很奇怪。和 ":" 方法,尽管这无关紧要。
  • 尝试用这个打印出最后一个查询:qDebug () << query->lastQuery() 只是为了确保。打印出来的是什么?另外,您能否在插入第二种情况之前检查该表是否正确存在?您可以使用命令行客户端进行双重检查。
  • @LaszloPapp 准备好一切正常!谢谢!
  • 好的,太好了。提交答案以获得更好的可读性。

标签: c++ database qt sqlite qsqlquery


【解决方案1】:

请使用 prepare 作为official example:

QSqlQuery testQuery;
testQuery.prepare("INSERT INTO test(testcol) VALUES(:val)");
testQuery.bindValue(":val", someQStringObj);
testQuery.exec();

错误的原因是在绑定到相应的占位符之前执行了查询。相关部分可以看constructor documentation

如果查询不是空字符串,则执行。

【讨论】:

  • 问题是使用构造函数“如果查询不是空字符串,它将被执行。” - 所以查询是在绑定之前执行的...
  • "错误的原因是查询是在绑定到对应占位符之前执行的"——看起来好像不起作用的代码在绑定到对应占位符之前执行了查询对我来说......我错过了什么吗?
猜你喜欢
  • 2019-04-09
  • 2017-01-18
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多