QT基础篇(13)QT5数据库

这篇具有很好参考价值的文章主要介绍了QT基础篇(13)QT5数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.数据库基本概念

数据库(Database)是指存储、管理和组织数据的集合。它是一个组织化的、可持久化的数据集合,用于支持数据的存储、检索、更新和管理。

数据库系统(Database System)是建立在计算机上的数据管理系统,由数据库、数据库管理系统(DBMS)和应用程序组成。它能够在计算机上创建、使用和维护数据库,提供数据的存储、检索和管理功能。

数据库管理系统(Database Management System,DBMS)是一种软件系统,用来管理数据库,提供对数据库的访问和操作接口,包括数据的存储、检索、更新、删除、查询等功能。常见的DBMS有MySQL、Oracle、SQL Server等。

数据库模型(Database Model)是数据库中数据的逻辑组织方式。常见的数据库模型有层次模型、网状模型、关系模型和面向对象模型。其中,关系模型是最常用的数据库模型,它将数据组织为表格(即关系),并使用关系代数和关系演算进行数据操作。

数据库管理系统通过SQL(Structured Query Language)语言来操作数据库。SQL是一种专门用来管理和操作关系型数据库的语言,它可以对数据库进行查询、更新、删除、插入等操作。

数据库的基本概念还包括数据模型、数据表、字段、记录、主键、外键、索引等。数据模型定义了数据库中数据的组织方式和关系;数据表是数据库中数据的逻辑结构,它由多个字段组成;字段是数据表中的一个属性,代表存储数据的最小单元;记录是数据表中的一行,代表一条具体的数据;主键是数据表中唯一标识记录的字段;外键是数据表中关联其他表的字段;索引是对数据库中某个字段或多个字段的值进行排序和存储,提高查询效率。

2.常用SQL语句
2.1 数据查询

常用的数据库查询SQL语句如下:

  1. SELECT: 用于查询数据库中的数据,可以选择要查询的字段、表格和条件。 例如:SELECT * FROM 表名; // 查询表中的所有字段和数据 SELECT 列名1, 列名2 FROM 表名; // 查询指定字段的数据 SELECT * FROM 表名 WHERE 条件; // 查询满足条件的数据

  2. INSERT INTO: 用于向数据库中插入新的数据。 例如:INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2); // 插入指定字段的数据

  3. UPDATE: 用于更新数据库中的数据。 例如:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件; // 更新满足条件的数据

  4. DELETE: 用于删除数据库中的数据。 例如:DELETE FROM 表名 WHERE 条件; // 删除满足条件的数据

  5. WHERE: 用于筛选满足条件的数据。 例如:SELECT * FROM 表名 WHERE 列名 = 值; // 查询满足条件的数据

  6. ORDER BY: 用于对查询结果进行排序。 例如:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; // 按照指定列的升序/降序排序

  7. GROUP BY: 用于对查询结果进行分组。 例如:SELECT 列名1, 列名2 FROM 表名 GROUP BY 列名1; // 按照指定列进行分组

  8. JOIN: 用于将多个表格连接在一起进行查询。 例如:SELECT * FROM 表名1 JOIN 表名2 ON 表名1.列名 = 表名2.列名; // 连接两个表格查询数据

  9. HAVING: 用于在GROUP BY语句中对分组后的结果进行筛选。 例如:SELECT 列名1, COUNT(列名2) FROM 表名 GROUP BY 列名1 HAVING COUNT(列名2) > 值; // 筛选满足条件的分组结果

  10. DISTINCT: 用于去重查询结果。 例如:SELECT DISTINCT 列名 FROM 表名; // 查询指定字段的去重结果

以上是一些常用的数据库查询SQL语句,可以根据具体需求进行组合和扩展。

2.2 数据操作

常用的数据库数据操作SQL语句如下:

  1. INSERT INTO: 用于向数据库中插入新的数据。 例如:INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2); // 插入指定字段的数据

  2. UPDATE: 用于更新数据库中的数据。 例如:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件; // 更新满足条件的数据

  3. DELETE: 用于删除数据库中的数据。 例如:DELETE FROM 表名 WHERE 条件; // 删除满足条件的数据

  4. TRUNCATE TABLE: 用于快速清空表中的数据,但不会回滚事务。 例如:TRUNCATE TABLE 表名; // 清空表中的数据

  5. CREATE TABLE: 用于创建新的数据库表。 例如:CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...); // 创建表结构

  6. ALTER TABLE: 用于修改数据库表的结构。 例如:ALTER TABLE 表名 ADD 列名 数据类型; // 添加新的列 ALTER TABLE 表名 MODIFY 列名 数据类型; // 修改列的数据类型 ALTER TABLE 表名 DROP 列名; // 删除列

  7. CREATE INDEX: 用于创建索引,加快查询速度。 例如:CREATE INDEX 索引名 ON 表名 (列名); // 在指定列上创建索引

  8. DROP INDEX: 用于删除索引。 例如:DROP INDEX 索引名 ON 表名; // 删除指定表的索引

  9. CREATE VIEW: 用于创建视图,可以将数据库中的数据以虚拟表的形式展现。 例如:CREATE VIEW 视图名 AS SELECT 列名1, 列名2 FROM 表名; // 创建视图

  10. DROP VIEW: 用于删除视图。 例如:DROP VIEW 视图名; // 删除视图

以上是一些常用的数据库数据操作SQL语句,可以根据具体需求进行组合和扩展。

3. QT操作数据库
3.1 QT操作SQLite数据库

在QT5中操作SQLite数据库需要使用QT的数据库模块,需要引入以下头文件:

#include <QtSql>

首先,需要创建一个Qt数据库连接对象,代码如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");  // 数据库文件名,可以是绝对路径或相对路径

if (!db.open()) {
    qDebug() << "Failed to open database!";
    return;
}

在数据库打开成功后,可以执行SQL语句进行数据操作。例如,创建一个表并插入数据:

QSqlQuery query;
query.exec("CREATE TABLE students (id INT PRIMARY KEY, name TEXT, age INT)");

query.prepare("INSERT INTO students (id, name, age) VALUES (?, ?, ?)");
query.addBindValue(1);
query.addBindValue("John");
query.addBindValue(20);
query.exec();

注意,在执行SQL语句之前,需要创建一个QSqlQuery对象,用于执行和操作SQL语句。可以使用exec()函数执行SQL语句,或使用prepare()和bindValue()函数准备并执行参数化查询。

执行查询语句并获取结果:

if (query.exec("SELECT * FROM students")) {
    while (query.next()) {
        int id = query.value(0).toInt();
        QString name = query.value(1).toString();
        int age = query.value(2).toInt();
        qDebug() << "ID:" << id << "Name:" << name << "Age:" << age;
    }
}

以上代码演示了如何执行SELECT语句并获取查询结果。可以通过value()函数根据字段索引或字段名获取对应的值。

最后,关闭数据库连接:

db.close();

以上是简单的示例代码,通过QT的数据库模块可以实现更复杂的数据库操作,如更新、删除、事务处理等。详细的API文档可以参考QT官方文档。

3.2 QT操作主从视图及XML

在QT中,可以使用QTableView和QStandardItemModel来实现主从视图的操作。

首先,需要创建两个QTableView和对应的QStandardItemModel,一个是主视图,一个是从视图。代码如下:

QTableView* masterTableView = new QTableView;
QStandardItemModel* masterModel = new QStandardItemModel;

QTableView* detailTableView = new QTableView;
QStandardItemModel* detailModel = new QStandardItemModel;

然后,将数据模型设置给相应的视图:

masterTableView->setModel(masterModel);
detailTableView->setModel(detailModel);

接下来,可以使用模型的方法来填充数据,例如:

QStandardItem* item1 = new QStandardItem("Item 1");
QStandardItem* item2 = new QStandardItem("Item 2");
QStandardItem* item3 = new QStandardItem("Item 3");

masterModel->appendRow({ item1, item2, item3 });

在主视图中,可以监听当前选中的行,并根据选中的行来更新从视图的数据。代码如下:

connect(masterTableView->selectionModel(), &QItemSelectionModel::currentRowChanged, [=](const QModelIndex& current, const QModelIndex& previous) {
    if (current.isValid()) {
        int row = current.row();
        // 根据选中的行更新从视图的数据
        // ...
    }
});

以上代码演示了如何根据主视图的选中行来更新从视图的数据。你可以根据实际需求来获取选中行的数据,并更新从视图的模型。

关于XML的操作,QT提供了QXmlStreamReader和QXmlStreamWriter两个类来读取和写入XML数据。

例如,读取XML文件并解析数据:

QFile file("data.xml");
if (file.open(QIODevice::ReadOnly)) {
    QXmlStreamReader reader(&file);

    while (!reader.atEnd()) {
        if (reader.isStartElement()) {
            if (reader.name() == "name") {
                QString name = reader.readElementText();
                qDebug() << "Name:" << name;
            }
        }
        reader.readNext();
    }

    if (reader.hasError()) {
        qDebug() << "XML Error:" << reader.errorString();
    }

    file.close();
}

以上代码演示了如何逐行读取XML文件中的数据。你可以根据标签名来获取相应的数据。

写入XML数据的过程与读取类似,首先创建QXmlStreamWriter对象,并调用相应的方法来写入数据:

QFile file("data.xml");
if (file.open(QIODevice::WriteOnly)) {
    QXmlStreamWriter writer(&file);
    writer.setAutoFormatting(true);

    writer.writeStartDocument();
    writer.writeStartElement("root");

    writer.writeTextElement("name", "Name 1");

    writer.writeEndElement();
    writer.writeEndDocument();

    file.close();
}

以上代码演示了如何创建一个XML文件,并写入一些简单的数据。你可以根据实际需求来添加更多的标签和数据。

QT提供了丰富的API来处理主从视图和XML数据操作,上述代码只是简单示例,具体的使用方式可以参考QT官方文档。文章来源地址https://www.toymoban.com/news/detail-814570.html

到了这里,关于QT基础篇(13)QT5数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 九、Qt C++ 数据库开发

    《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》 《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》  《七、Qt 信号和槽》  《八、Qt C++ 毕业设计》 《九、Qt C++ 数据库开发》 《

    2024年01月18日
    浏览(44)
  • C++ Qt开发:QSqlDatabase数据库组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 QSqlDatabase 数据库模块的常用方法及灵活运用。 Qt SQL模块是Qt框架的一部分,它

    2024年02月04日
    浏览(33)
  • C++ Qt开发:Charts与数据库组件联动

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 Charts 组件与 QSql 数据库组件的常用方法及灵活运用。 在之前的文章中详细介绍

    2024年02月03日
    浏览(31)
  • C++ Qt开发:数据库与TableView多组件联动

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 TableView 组件与数据库联动的常用方法及灵活运用。 在Qt中,通常我们不会在

    2024年02月04日
    浏览(38)
  • 软件设计开发笔记4:QT操作SQLite数据库

      有时候我们需要在软件中记录一些历史数据以便于对数据的查询。而我们希望软件不能太复杂,体量也不要太大,这个时候就需要如SQLite这样轻量级的数据库。这篇中我们就来讨论如何在使用QT开发应用是操作SQLite数据库。   SQLite是一款开源、轻量级、跨平台的数据库

    2024年02月09日
    浏览(49)
  • QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板

    在上一文《QT学习笔记-QT安装oracle oci驱动》中介绍了在Windows环境下使用QT访问oracle数据库时遇到驱动无法加载问题的解决办法,大体思路是对QT源码中数据库驱动的源码oci进行编译,要想通过编译需要依赖对应数据库的头文件和库(可以通过下载oracle instant client),编译通过

    2024年02月13日
    浏览(44)
  • VS2022+QT5.13.2环境配置及安装测试教程

    (1)visual Studio2022下载链接:https://visualstudio.microsoft.com/zh-hans/?rr=https://www.microsoft.com/zh-cn/ (2)下载完成后,打开VisualStudioSetup,点击继续,选择以下模块。 `(1)通过路径下载qt5.13.2,https://download.qt.io/archive/qt/5.13/5.13.2/ (2)下载完毕后,打开软件,点击Next。如果有QT账号,

    2024年02月15日
    浏览(44)
  • 【QT5:CAN卡通信的上位机-代码练习-收发数据+布局+引用外部库+基础样例(1)】

    有句话叫做,出来还混,早晚是要还得,当时为快点使用完成can的qt上位机,偶然在网上找到一个样例,正好能运行,就直接拿着那个样例进行改了,后来上位机遇到点精准时间问题,一时间不知道如何调,正好也借着这个机会,学习一下样例代码,纯手打一遍。 实验环境还

    2024年02月01日
    浏览(21)
  • QT基础篇(12)QT5多线程

    在任何一门语言中,多线程都是一个相对其他方面比较重要的点,这里面的知识体系很庞大,同步和异步之间的处理方式,以及IO多路复用等等各种进行性能优化的方面,在往上层一点我们不可能一直进行系统层次的调用,这样太费时间也太麻烦,就到设计模式这里,比如反

    2024年01月22日
    浏览(30)
  • QT基础篇(16)QT5单元测试框架

    1.QTEstLib框架 QTestLib框架是一个用于软件测试的开源框架,是Qt工具套件的一部分。它提供了一组用于编写自动化测试和单元测试的类和函数。 QTestLib可以方便地为Qt应用程序编写单元测试,包括测试GUI和非GUI的代码。它提供了一系列断言和辅助函数,用于验证测试的预期结果

    2024年01月25日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包