Uwaga: dotyczy to SQLite, chociaż spodziewam się, że problem dotyczy strony Qt.Qt - Jak powiązać QList z QSqlQuery za pomocą klauzuli "WHERE ... IN"?
Najpierw utwórz tabelę bazy danych z SQLite narzędzia wiersza poleceń:
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);
Potem przetestować moje zapytanie: (. Ci są spodziewane wyniki)
sqlite> SELECT id,state FROM testtable WHERE state IN (0,1,2);
1|0
3|1
Następnie uruchamiam ten kod 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";
}
która drukuje to:
przed
po
Brak wiersze były drukowane. Zakładam, że dzieje się tak dlatego, że nie mogę powiązać listy bezpośrednio z elementem zastępczym w klauzuli "w". Ale czy istnieje sposób, aby to zrobić? Nie byłem w stanie znaleźć niczego na ten temat.