QT和SQLITE:使用数组的元素过滤
Qt and SQLite: filter using the elements of an array
我目前正在从事一个项目,我是QT和SQLite的新手。我目前有一个整数数组,并希望使用它来获取链接到数组中元素的数据。例如,如果数据为61616,它将输出sarah。
query.prepare("SELECT name,memberType FROM members WHERE id = :id");
for(index = 0; index < dateIndex; index++)
{
id = idAr[index];
query.addBindValue(id);
query.exec();
}
model2->setQuery(query);
ui->tableView_10->setModel(model2);
我知道这是错误的。有人可以解释如何正确执行此操作吗?
更新:
std::vector<int> idA={3, 7, 15, 16, 19, 30};
QSqlQuery qry(QString("SELECT name, memberType FROM members WHERE id IN (?%1)")
.arg(QString(", ?").repeated(idA.size()-1)));
for(int i = 0; i < idA.size(); i++)
{
int id2 = idA[i];
qry.addBindValue(id2);
}
qry.exec();
model2->setQuery(qry);
ui->tableView_10->setModel(model2);
但是,它仍然不会输出到表。
在这种情况下,您必须使用的句子是 IN
:
SELECT name, memberType FROM members WHERE id IN (2, 4, 5, 6)
在这种情况下,我们将使用字符串串联:
std::vector<int> idA = {3, 7, 15, 16, 19, 30};
QStringList ids_string;
for(const int & val : idA)
ids_string << QString::number(val);
QSqlQuery query(QString("SELECT name, memberType FROM members WHERE id IN (%1)")
.arg(ids_string.join(",")));
model.setQuery(query);
示例:
#include <QApplication>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QTableView>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open()) {
qDebug()<<"Unable to establish a database connection";
return false;
}
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS members (id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR(20), memberType VARCHAR(20))");
for(int i=1; i<40; i++)
query.exec(QString("insert into members(name, memberType) values('name%1', 'memberType%2')").arg(i).arg(i));
return true;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(!createConnection())
return -1;
QTableView w;
QSqlQueryModel model;
std::vector<int> ids = {3, 7, 15, 16, 19, 30};
QStringList ids_string;
for(const int & val : ids) ids_string<<QString::number(val);
QSqlQuery query(QString("SELECT name, memberType FROM members WHERE id IN (%1)")
.arg(ids_string.join(",")));
model.setQuery(query);
w.setModel(&model);
w.show();
return a.exec();
}
另一个解决方案:
int std::vector<int> idAr={3, 7, 15, 16, 19, 30};
int dateIndex = 6;
QSqlQuery query(QString("SELECT name, memberType FROM members WHERE id IN (?%1)")
.arg(QString(", ?").repeated(idAr.size()-1)));
for(const int & id: idAr)
query.addBindValue(id);
query.exec();
相关文章:
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 删除在结构 c++ 中声明的数组元素
- Getter 和 Setter 用于类 C++ 中的数组元素
- 尝试递归获取数组元素的总和
- 使用SWIG将numpy数组元素(int)传递给c++int