SQLite和QSqlQuery:引用有界值

SQLite and QSqlQuery: Quoting bounded values

本文关键字:引用 QSqlQuery SQLite      更新时间:2023-10-16

我想获得给定月份和年份的条目日期,为此我在SQliteman中成功执行下一个查询:

SELECT date FROM Entries WHERE strftime('%Y-%m',date) = '2013-04'

要将此查询与QSqlQuery一起使用,我使用以下代码

query.prepare("SELECT date FROM Entries WHERE strftime('%Y-%m',date) = ':year-:month'");
query.bindValue(":month", QString().sprintf("%02d", month));
query.bindValue(":year", QString::number(year));

但是会引发错误"Parameter count mismatch"。这是对于:year:month中的引号,但是我必须使用它,否则查询不会返回任何结果。

如果不能使用引号,该如何构建查询?

不能替换字符串中的参数;参数本身是完整的字符串。

连接SQL中的字符串:

query.prepare("SELECT ... WHERE strftime(...) = :year || '-' || :month");

也可以事先构造整个字符串:

query.prepare("SELECT ... WHERE strftime(...) = :yyyymm");
query.bindValue(":yyyymm", month + "-" + year);