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

相关推荐
likangbinlxa12 分钟前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
CodeKwang39 分钟前
Qt实战:简易Excel表格 | 附完整源码
qt·excel·qtabwidget·qt控件
r i c k40 分钟前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦1 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德2 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql