使用QSqlDatabase、QSqlQuery、QSqlRecord、Sqlite数据库实现一个简单的界面查询
1. 创建Sqlite数据库,表
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QSqlDatabase"
#include "QSqlQuery"
#include "QSqlError"
#include "QMessageBox"
#include "QFileDialog"
#include "QSqlRecord"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// ui->openBtn->setEnabled(true);
// ui->qryBtn->setEnabled(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
//打开数据库连接
void MainWindow::on_openBtn_clicked()
{
QString aFile= QFileDialog::getOpenFileName(this,"选择文件","","SQLite 数据库(*.db3)");
if (aFile.isEmpty())
return;
DB = QSqlDatabase::addDatabase("QSQLITE"); //添加 SQLITE 数据库驱动
DB.setDatabaseName(aFile);
// QTextCodec
if (!DB.open()) {
QMessageBox::critical(NULL, "错误", "数据库连接失败", QMessageBox::Ok, QMessageBox::Ok);
qDebug() << "FAIL" << DB.lastError().text();
} else {
QMessageBox::information(NULL, "信息", "数据库连接成功");
qDebug() << "SUCCESS";
// ui->openBtn->setEnabled(false);
// ui->qryBtn->setEnabled(true);
}
}
void MainWindow::on_qryBtn_clicked()
{
qryModel= new QSqlQueryModel(this);
selModel= new QItemSelectionModel(qryModel,this);
// ui->tableView->model()
ui->tableView->setModel(qryModel);
ui->tableView->setSelectionModel(selModel);
qryModel->setQuery("SELECT id,name, Gender, gender, hobby "
" FROM t_user ORDER BY id");
if (qryModel->lastError().isValid())
{
QMessageBox::information(this, "错误", "数据表查询错误,错误信息\n"
+qryModel->lastError().text());
return;
}
QSqlRecord rec= qryModel->record(); //获取空记录,用于获取字段序号
//设置字段显示标题
qryModel->setHeaderData(rec.indexOf("id"),Qt::Horizontal, "序号");
qryModel->setHeaderData(rec.indexOf("name"), Qt::Horizontal, "姓名");
qryModel->setHeaderData(rec.indexOf("gender"), Qt::Horizontal, "性别");
qryModel->setHeaderData(rec.indexOf("hobby"), Qt::Horizontal, "爱好");
}
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QItemSelectionModel>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QSqlDatabase DB; //数据库连接
QSqlQueryModel *qryModel; //Query数据模型
QItemSelectionModel *selModel; //选择模型
private slots:
void on_openBtn_clicked();
void on_qryBtn_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
结果