Я тоже некоторое время искал способ сделать это, и Google не очень помог.Я начал играть с этим, и оказалось, что это действительно возможно, по крайней мере, в ограниченной степени.Я проверил это только с PostgreSQL, поэтому я не знаю о других RDBMS.Мой случай касается только целочисленных ключей, но теоретически должен работать и для других типов.
Способ сделать это - создать массив вручную и связать его с переменной.Скажем, я хочу выбрать нескольких пользователей по их id
из таблицы, например SELECT id, firstname, lastname FROM users WHERE id = ANY(:id)
.Вот как это можно сделать.
QList<int> ids; // A list of IDs to select
ids << 1 << 5 << 7;
// Create strings from list
QStringList idstrings;
foreach(int id, ids) {
idstrings << QString::number(id);
}
QString numberlist = idstrings.join(",");
// Create, prepare and execute the query
QSqlQuery sql;
sql.prepare("SELECT id, firstname, lastname FROM users WHERE id = ANY(:id)");
sql.bindValue(":id", QString("{%1}").arg(numberlist));
sql.exec();
// Now this is possible
while( sql.next() ) {
qDebug() << sql.value(0).toInt() << sql.value(1).toString() << sql.value(2).toString();
}
Печатается по памяти, но должно быть в порядке.Я знаю, что этот ответ очень поздно, но, надеюсь, этот пост поможет кому-то еще.И, как упоминалось ранее, это работает только с PostgreSQL.Однако может быть возможно адаптировать это и к другим базам данных, в зависимости от их поддержки массива.