Примечание: это с 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
(Ожидаемые результаты.)
Затем я запускаю этот код на С++:
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". Но есть ли способ сделать это? Я ничего не смог найти об этом.