目录
一、前言
二、Qt相关类
2.1 QSqlDatabase
2.2 QSqlQuery
2.3 QSqlQueryModel
三、Qt基本应用实现
3.1 mainwindow.h
3.2 mainwindow.cpp
3.3 应用界面
四、总结
一、前言
本文进行在Qt中实现SQLite3的基本功能实现演示。
在Qt中不论我们连接的何种类型的关系型数据库,在我们使用的时候其操作流程是一致的:
- 创建数据库实例并初始化
- 连接数据库
- 对数据库进行一系列的添、删、查、改操作(编写并执行SQL语句)
- 关闭数据库
系统版本:Ubuntu 22.04
IDE:QtCreator 13.0.2 (based on Qt 6.6.3)
编译器版本:Qt 6.5.3 GCC 64bit
二、Qt相关类
Qt中和数据库操作最为紧密相关的类有三个
2.1 QSqlDatabase
QSqlDatabase, 通过这个类可以实现数据库的添加、删除、复制、关闭等操作。
通过QtCreator可以查询需要增加的头文件、以及pro文件增加的内容。
代码示例:
/*连接SQLite数据库*/
//创建数据库实例(加载对应的驱动), 加载的共享库位于/opt/Qt5.12.0/5.12.0/gcc_64/plugins/sqldrivers/
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//设置要使用的数据库名称
db.setDatabaseName("customdb");
//连接数据库
bool ok = db.open();
注意: 使用Qt数据库模块需要在工程文件中添加 "QT += sql"。
2.2 QSqlQuery
QSqlQuery,数据库操作类,进行数据库的增、删、改、查等操作。
代码示例:
/*查询*/
QSqlQuery query("SELECT * FROM artist");
int fieldNo = query.record().indexOf("country");
while (query.next()) {QString country = query.value(fieldNo).toString();doSomething(country);
}
/*插入*/
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) ""VALUES (:id, :forename, :surname)");
query.bindValue(":id", 1001);
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();/*也可以自行拼接字符串*/
QSqlQuery query;
query.exec("INSERT INTO employee (id, name, salary) ""VALUES (1001, 'Thad Beaumont', 65000)");
2.3 QSqlQueryModel
QSqlQueryModel, 执行SQL语句和遍历结果集的高级接口。它构建在底层QSqlQuery之上,可以用来为视图类(如QTableView)提供数据。
代码示例:
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("SELECT name, salary FROM employee");QTableView *view = new QTableView;
view->setModel(model);
view->show();
三、Qt基本应用实现
3.1 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlQueryModel>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;QSqlDatabase db;QSqlQueryModel model;
};
#endif // MAINWINDOW_H
3.2 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTableView>
#include <QVBoxLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/**/db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("./test.db");db.open();QSqlQuery query("SELECT * FROM COMPANY;");model.setQuery(query);QTableView *view = new QTableView(this);view->setModel(&model);QVBoxLayout* vb = new QVBoxLayout(this);vb->addWidget(view);ui->centralwidget->setLayout(vb);
}MainWindow::~MainWindow()
{delete ui;
}
3.3 应用界面
四、总结
本文介绍了Qt数据库相关类,并总结了Qt操作数据库的基本操作流程,最后进行了基本应用的代码实验。