以下是一个使用Qt框架和C++编写的SQLite数据库多字段查询,结果在Table View控件中显示的示例代码:
首先需要在项目文件中包含sqlite3.h头文件,并链接libsqlite3.a库文件。
#include <QSqlTableModel>
#include <QTableView>
#include <QVBoxLayout>
#include <QPushButton>
#include "sqlite3.h"
void queryDatabase(QSqlTableModel *model, QString name, int age, QString address) {
// 打开数据库连接
sqlite3 *db;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
printf("Cannot open database: %s\n", sqlite3_errmsg(db));
return;
}
// 构造SQL语句
QString sql = "SELECT * FROM person WHERE 1=1";
if (!name.isEmpty()) {
sql += QString(" AND name='%1'").arg(name);
}
if (age != -1) {
sql += QString(" AND age=%1").arg(age);
}
if (!address.isEmpty()) {
sql += QString(" AND address LIKE '%%%1%%'").arg(address);
}
// 查询数据库并将结果存入model中
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->setQuery(sql);
// 关闭数据库连接
sqlite3_close(db);
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建主窗口
QWidget *mainWidget = new QWidget;
QVBoxLayout *layout = new QVBoxLayout(mainWidget);
// 创建查询条件输入框和按钮
QLineEdit *nameLineEdit = new QLineEdit;
QSpinBox *ageSpinBox = new QSpinBox;
ageSpinBox->setMinimum(0);
ageSpinBox->setMaximum(200);
QLineEdit *addressLineEdit = new QLineEdit;
QPushButton *queryButton = new QPushButton("查询");
// 创建Table View控件和model
QSqlTableModel *model = new QSqlTableModel;
QTableView *tableView = new QTableView;
tableView->setModel(model);
// 将控件添加到布局中
layout->addWidget(nameLineEdit);
layout->addWidget(ageSpinBox);
layout->addWidget(addressLineEdit);
layout->addWidget(queryButton);
layout->addWidget(tableView);
// 点击查询按钮时执行查询操作
QObject::connect(queryButton, &QPushButton::clicked, [=]() {
QString name = nameLineEdit->text();
int age = ageSpinBox->value();
QString address = addressLineEdit->text();
queryDatabase(model, name, age, address);
});
mainWidget->show();
return app.exec();
}
在这个示例代码中,我们首先定义了一个queryDatabase
函数来查询数据库并将结果存入model中。这个函数接受三个参数:name、age和address,它们分别对应数据库表中的三个字段。如果某个条件为空或为-1,则该条件不会作为查询条件。
然后我们创建了主窗口,并向其中添加了一个查询条件输入框、一个Table View控件和一个查询按钮。当用户点击查询按钮时,我们调用queryDatabase
函数来执行查询操作,并将结果显示在Table View控件中。
需要注意的是,在使用Qt和SQLite进行开发时,我们可以通过QSqlTableModel来方便地对数据库进行操作,而无需直接使用原始的SQLite API。