SQLite3(3):Qt中使用SQLite3

目录

一、前言

二、Qt相关类

[2.1 QSqlDatabase](#2.1 QSqlDatabase)

[2.2 QSqlQuery](#2.2 QSqlQuery)

[2.3 QSqlQueryModel](#2.3 QSqlQueryModel)

三、Qt基本应用实现

[3.1 mainwindow.h](#3.1 mainwindow.h)

[3.2 mainwindow.cpp](#3.2 mainwindow.cpp)

[3.3 应用界面](#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文件增加的内容。

代码示例:

cpp 复制代码
/*连接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,数据库操作类,进行数据库的增、删、改、查等操作。

代码示例:

cpp 复制代码
/*查询*/
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)提供数据。

代码示例:

cpp 复制代码
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

cpp 复制代码
#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_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QSqlDatabase db;
    QSqlQueryModel model;
};
#endif // MAINWINDOW_H

3.2 mainwindow.cpp

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操作数据库的基本操作流程,最后进行了基本应用的代码实验。

相关推荐
广州灵眸科技有限公司10 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手12 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh14 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
Quz15 小时前
QML 信号与槽:直接绑定与跨文件通信
qt·编程语言·设计
z1234567898615 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD15 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
GIS阵地15 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
java_logo15 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
Ai_easygo16 小时前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite