在使用 QSqlTableModel
时,setFilter
方法用于设置 SQL 过滤条件,以便从数据库中筛选出符合条件的记录。setFilter
方法的参数是一个字符串,表示 SQL 的 WHERE
子句,因此你可以在这个字符串中包含多个条件。
如果你有多个条件需要设置,可以使用 SQL 的 AND
或 OR
运算符将这些条件组合在一起。以下是一些示例,展示了如何使用 setFilter
方法设置多个条件。
AND
运算符组合多个条件假设你有一个名为 employees
的表,其中包含 name
、age
和 department
三个字段。你希望筛选出年龄大于 30 且部门为 "HR" 的员工。
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[])
{
// 初始化数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("example.db");
if (!db.open()) {
qDebug() << "Failed to connect to database.";
return -1;
}
// 创建 QSqlTableModel
QSqlTableModel model;
model.setTable("employees");
// 设置过滤条件
QString filter = "age > 30 AND department = 'HR'";
model.setFilter(filter);
// 执行查询
model.select();
// 输出结果
for (int i = 0; i < model.rowCount(); ++i) {
QString name = model.record(i).value("name").toString();
int age = model.record(i).value("age").toInt();
QString department = model.record(i).value("department").toString();
qDebug() << name << age << department;
}
return 0;
}
OR
运算符组合多个条件假设你希望筛选出年龄大于 30 或部门为 "HR" 的员工。
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[])
{
// 初始化数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("example.db");
if (!db.open()) {
qDebug() << "Failed to connect to database.";
return -1;
}
// 创建 QSqlTableModel
QSqlTableModel model;
model.setTable("employees");
// 设置过滤条件
QString filter = "age > 30 OR department = 'HR'";
model.setFilter(filter);
// 执行查询
model.select();
// 输出结果
for (int i = 0; i < model.rowCount(); ++i) {
QString name = model.record(i).value("name").toString();
int age = model.record(i).value("age").toInt();
QString department = model.record(i).value("department").toString();
qDebug() << name << age << department;
}
return 0;
}
如果你的过滤条件是动态生成的,可以使用字符串拼接或 QString
的 arg
方法来构建过滤条件。
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[])
{
// 初始化数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("example.db");
if (!db.open()) {
qDebug() << "Failed to connect to database.";
return -1;
}
// 创建 QSqlTableModel
QSqlTableModel model;
model.setTable("employees");
// 动态构建过滤条件
int minAge = 30;
QString department = "HR";
QString filter = QString("age > %1 AND department = '%2'").arg(minAge).arg(department);
model.setFilter(filter);
// 执行查询
model.select();
// 输出结果
for (int i = 0; i < model.rowCount(); ++i) {
QString name = model.record(i).value("name").toString();
int age = model.record(i).value("age").toInt();
QString department = model.record(i).value("department").toString();
qDebug() << name << age << department;
}
领取专属 10元无门槛券
手把手带您无忧上云