Hinweis: Dies ist mit SQLite, obwohl ich erwarte, dass das Problem auf der Qt-Seite ist.
Zuerst richte ich eine Datenbanktabelle mit dem SQLite-Befehlszeilentool ein:
%Vor%Dann teste ich meine Abfrage:
%Vor%(Das sind die erwarteten Ergebnisse.)
Dann führe ich diesen C ++ Code aus:
%Vor%was dies ausdruckt:
vor einem nach
Es wurden keine Zeilen gedruckt. Ich gehe davon aus, dass ich eine Liste nicht direkt an einen Platzhalter in einer "in" -Klausel binden kann. Aber gibt es einen Weg, es zu tun? Ich konnte nichts darüber finden.
Egal, meine Frage. Ich denke, was ich versuche, ist mit vorbereiteten Aussagen, unabhängig vom Framework oder RDBMS, nicht möglich. Sie können "WO x IN (?)" Tun, aber dann das "?" bezieht sich auf einen einzelnen Wert - es kann keine Liste von Werten sein; oder du kannst "WHERE x IN (?,?,?) und jedes"? muss separat gebunden werden.
Ich habe schon seit einiger Zeit nach einer Möglichkeit gesucht, dies auch zu tun, und Google war nicht sehr hilfreich. Ich habe damit angefangen herumzuspielen und es stellt sich heraus, dass es in der Tat möglich ist, zumindest in begrenztem Maße. Ich habe es nur mit PostgreSQL getestet, daher kenne ich andere RDBMS nicht. Mein Fall betrifft nur ganzzahlige Schlüssel, sollte aber theoretisch auch für andere Typen funktionieren.
Die Methode besteht darin, ein Array manuell zu erstellen und es an eine Variable zu binden. Angenommen, ich möchte mehrere Benutzer anhand ihrer id
s aus einer Tabelle auswählen, z. B. SELECT id, firstname, lastname FROM users WHERE id = ANY(:id)
. Hier ist, wie es gemacht werden kann.
aus dem Speicher eingegeben, sollte aber in Ordnung sein. Ich weiß, dass diese Antwort sehr spät ist, aber hoffentlich hilft dieser Beitrag jemand anderem da draußen. Und wie bereits erwähnt, funktioniert das nur mit PostgreSQL. Je nach Array-Unterstützung kann dies jedoch auch an andere Datenbanken angepasst werden.