Note: c'est avec SQLite, même si je pense que le problème est du côté de Qt.Qt - Comment lier une QList à une QSqlQuery avec une clause "WHERE ... IN"?
D'abord, je mis en place une table de base de données de l'outil de ligne de commande 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);
Puis-je tester ma requête: (. Ceux-ci sont les résultats attendus)
sqlite> SELECT id,state FROM testtable WHERE state IN (0,1,2);
1|0
3|1
Ensuite, je lance ce code 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";
}
qui imprime ceci:
avant
après
Aucune ligne n'a été imprimées. Je suppose que c'est parce que je ne peux pas lier une liste directement à un espace réservé dans une clause "in". Mais y a-t-il un moyen de le faire? Je n'ai pas été capable de trouver quoi que ce soit à ce sujet.