注意:这是使用 SQLite,尽管我预计问题出在 Qt 方面。
首先,我通过 SQLite 命令行工具设置了一个数据库表:
sqlite> create table testtable ( id INTEGER PRIMARY KEY NOT NULL, state INTEGER );
sqlite> insert into testtable (state) values (0);
sqlite> insert into testtable (state) values (1);
sqlite> insert into testtable (state) values (9);
sqlite> insert into testtable (state) values (20);
然后我测试我的查询:
sqlite> SELECT id,state FROM testtable WHERE state IN (0,1,2);
1|0
3|1
(这些是预期的结果。)
然后我运行这个 C++ 代码:
void runQuery() {
QSqlQuery qq;
qq.prepare( "SELECT id,state FROM testtable WHERE state IN (:states)");
QList<QVariant> statesList = QList<QVariant>();
statesList.append(0);
statesList.append(1);
statesList.append(2);
qq.bindValue(":states", statesList);
qq.exec();
qDebug() << "before";
while( qq.next() ) {
qDebug() << qq.value(0).toInt() << qq.value(1).toInt();
}
qDebug() << "after";
}
打印这个:
之前
之后
没有打印行。我认为这是因为我无法将列表直接绑定到“in”子句中的占位符。但是有没有办法做到这一点?我无法找到任何关于此的信息。