QT6实现创建与操作sqlite数据库及读取实例(一)

news2024/11/28 0:37:52

一.Qt为SQL数据库提供支持的基本模块(Qt SQL)

   Qt SQL的API分为不同层:

   驱动层

   SQL API层

   用户接口层

1.驱动层

   对于Qt 是基于C++来实现的框架,该层主要包括QSqlDriver,QSqlDriverCreator,QSqlDriverCreatorBase,QSqlPlugin,and QSqlResult.这一层提供了特定数据和SQLAPI层之间的底层桥梁。

2.SQL API层

   对于SQL API层提供了数据库的访问相关类,其中,QSqlDatabase类进行连接,QSlqQuery可以完成于数据库的交互。除此之外,包括了还提供了QSqlError,QSqlField,QSqlIndex,and QSqlRecord类。

3.用户接口层

   用户接口层的几个类实现了将数据库中的数据链连接到窗口部件上,这些类是使用模型/试图框架实现的,它们是更高层次的抽象,主要包括QSqlQueryModel,QSqlTableModel,andQSqlRelationalTableModel.

4.Qt SQL模块对数据库类

在Qt中为SQL数据库提供驱动程序层、SQL API层和用户界面,其提供主要类的简要功能说明见下表:

二.SQLite数据库操作流程

   第一步:在项目管理文件(.pro)中,增加数据库模块:QT    += sql

   第二步:查看Qt对数据库的驱动的类型的支持

   第三步:连接数据库,打开数据库

   第四步:访问数据库,读写操作

   第五步:关闭数据库

三.代码示例

1.查看Qt对数据库的驱动的类型的支持

  1. 代码

#include <QApplication>

#include <QSqlDatabase>

#include <QDebug>

#include <QStringList>

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    qDebug() << "Available drivers:";

    QStringList drivers = QSqlDatabase::drivers();

    foreach(QString driver, drivers)

        qDebug() << driver;

    return a.exec();

}

(2)执行结果

2.Qt读写Sqlite数据库

Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。

下面示例采用QSqlQuery方法实现数据库操作。

(1)widget.h

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

#include <QSqlError>

#include <QSqlQueryModel>

#include <QSqlRelationalTableModel>

#include <QSqlRelationalTableModel>

#include <QTableView>

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

    Q_OBJECT

public:

    explicit Widget(QWidget *parent = nullptr);

    ~Widget();

private:

    Ui::Widget *ui;

    QSqlTableModel *model;

};

#endif // WIDGET_H

(2)widget.cpp

#include "widget.h"

#include "ui_widget.h"

#include <QSqlDatabase>

#include <QDebug>

#include <QSqlQuery>

Widget::Widget(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Widget)

{

    ui->setupUi(this);

    //1.创建与打开数据库

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setDatabaseName("dataset.db");

    if(!db.open())

    {

        qDebug() << "创建失败   " << db.lastError();

    }

    else

    {

        qDebug() << "创建成功";

    }

    //2.创建表

    QSqlQuery sql_query;

    QString create = "create table student(id int,name varchar(20),age int)";

    sql_query.prepare(create);

    sql_query.exec();

    //32.插入数据

    QString insert_sql = "insert into student values(?,?,?)" ;

    sql_query.prepare(insert_sql);

    sql_query.addBindValue(1);

    sql_query.addBindValue("Tom");

    sql_query.addBindValue(15);

    if(!sql_query.exec())

    {

        qDebug() << "插入执行错误: " << sql_query.lastError();

    }

    else {

        qDebug() << "插入成功";

    }

    //4.读取数据库表全部内容

    QString select_sql = "select * from student";

    sql_query.prepare(select_sql);

    if(!sql_query.exec())

    {

        qDebug() << "查看执行错误: " << sql_query.lastError();

    }

    else {

        while(sql_query.next())//如果下一行数据还存在,就继续执行

        {

            int id = sql_query.value(0).toInt();//将sql里的int转换为qt里的int

            QString name = sql_query.value(1).toString();//将sql里的string转化为qt里的string

            int age = sql_query.value(2).toInt();

            qDebug() << "id " << id << "  name: " << name << "  age: " << age;

        }

    }

    //5.更新数据内容

    QString update_sql = "update student set name =:nm where id =:n";

    sql_query.prepare(update_sql);

    sql_query.bindValue(":nm","TTTs");

    sql_query.bindValue(":n", "1");

    if(!sql_query.exec())

    {

        qDebug() << "更新失败" << sql_query.lastError();

    }

    else {

        qDebug() << "更新成功";

    }

    //6.再次读取数据内容

    select_sql = "select * from student";

    sql_query.prepare(select_sql);

    if(!sql_query.exec())

    {

        qDebug() << "查看执行错误: " << sql_query.lastError();

    }

    else {

        while(sql_query.next())//如果下一行数据还存在,就继续执行

        {

            int id1 = sql_query.value(0).toInt();//将sql里的int转换为qt里的int

            QString name1 = sql_query.value(1).toString();//将sql里的string转化为qt里的string

            int age1 = sql_query.value(2).toInt();

            qDebug() << "id " << id1 << "  name: " << name1 << "  age: " << age1;

        }

    }

    //7.删除数据内容

    QString delete1_sql = "delete from student where id = 1";

   // QString delete1_sql = "delete from student";

    sql_query.prepare(delete1_sql);

    if(!sql_query.exec())

    {

        qDebug() << "删除失败";

        qDebug() << sql_query.lastError().text();

    }

    else {

        qDebug() << "删除成功";

    }

}

Widget::~Widget()

{

    delete ui;

}

(3)执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1536394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux第78步_使用原子整型操作来实现“互斥访问”共享资源

使用原子操作来实现“互斥访问”LED灯设备&#xff0c;目的是每次只允许一个应用程序使用LED灯。 1、创建MyAtomicLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyAtomicLED回车”&#xff0c;创建MyA…

Python从 Google 地图空气质量 API 获取空气污染数据

获取给定位置当前的空气质量 让我们开始吧!在本节中,我们将介绍如何使用 Google 地图获取给定位置的空气质量数据。您首先需要一个 API 密钥,可以通过您的 Google Cloud 帐户生成该密钥。他们有90 天的免费试用期,之后您将为您使用的 API 服务付费。在开始大量拨打电话之前…

51单片机中断信号的种类及应用场景

在嵌入式系统中&#xff0c;中断是一种重要的事件处理机制&#xff0c;它可以在程序执行的任何时候暂停当前任务&#xff0c;转而执行与之相关的特殊任务或事件。51单片机作为一种常见的微控制器&#xff0c;其中断功能在各种应用中起着关键作用。然而&#xff0c;对于初学者和…

一、SpringBoot基础搭建

本教程主要给初学SpringBoot的开发者&#xff0c;通过idea搭建单体服务提供手把手教学例程&#xff0c;主要目的在于理解环境的搭建&#xff0c;以及maven模块之间的整合与调用 源码&#xff1a;jun/learn-springboot 以商城项目为搭建例子&#xff0c;首先计划建1个父模块&…

部署单节点k8s并允许master节点调度pod

安装k8s 需要注意的是k8s1.24 已经弃用dockershim&#xff0c;现在使用docker需要cri-docker插件作为垫片&#xff0c;对接k8s的CRI。 硬件环境&#xff1a; 2c2g 主机环境&#xff1a; CentOS Linux release 7.9.2009 (Core) IP地址&#xff1a; 192.168.44.161 一、 主机配…

GPT-4 VS Claude3、Gemini、Sora:五大模型的技术特点与用户体验

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

CTF题型 md5考法例题汇总

CTF题型 md5考法相关例题总结 文章目录 CTF题型 md5考法相关例题总结一.md5弱字符相等()[SWPUCTF 2021 新生赛]easy_md5 二.md5强字符相等()1)文件相等[2024 qsnctf 擂台赛 easy_md5]2)字符相等[安洵杯 2019]easy_web 三.md5哈希长度扩展攻击[NPUCTF2020]ezinclude文件包含利用…

深入技术细节:放弃Spring Security,自己实现Token权限控制!

最近做了个项目&#xff0c;大家都知道很多的项目都是在自己手上原本的框架内进行业务开发。但是甲方爸爸的这个项目需要交付原代码&#xff0c;并且要求框架逻辑简单清晰&#xff0c;二次开发简易上手。 那不是要重新从0到1写一套框架吗&#xff1f; 试着先给甲方爸爸报一下…

美食杂志制作秘籍:引领潮流,引领味蕾

美食杂志是一种介绍美食文化、烹饪技巧和美食体验的杂志&#xff0c;通过精美的图片和生动的文字&#xff0c;向读者展示各种美食的魅力。那么&#xff0c;如何制作一本既美观又实用的美食杂志呢&#xff1f; 首先&#xff0c;你需要选择一款适合你的制作软件。比如FLBOOK在线制…

Java微服务分布式事务框架seata的TCC模式

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

教大家使用vue实现 基础购物车。

首先我要知道一点 其能够数据变化的 都用{{}}来进行渲染类似 来看一下实现效果 实现思路 &#xff1a; 1&#xff0c;引进 vue.js 2,setup 将声明变量 方法放在setup里面 3&#xff0c;用响应式声明 ref&#xff08;&#xff09; 或rective声明 可以声明对象等等 let 也…

AST学习入门

AST学习入门 1.AST在线解析网站 https://astexplorer.net/ 1.type: 表示当前节点的类型&#xff0c;我们常用的类型判断方法t.is********(node)**,就是判断当前的节点是否为某个类型。 2**.start**:表示当前节点的开始位置 3.end:当前节点结束 4.loc : 表示当前节点所在的行…

产品推荐 | 基于Xilinx FPGA XC5VFX100T的6U VPX视频叠加板卡

01、产品概述 本板卡是基于Xilinx FPGA XC5VFX100T的6U VPX视频叠加板卡。主要用于视频叠加板具有多种高清图形输入接口&#xff0c;可实现其中两路高清视频信号的开窗显示和叠加显示功能&#xff1b;或者输出和输入图形接口的转换。 02、物理特性 ● 尺寸&#xff1a;6U CPC…

【文献阅读】AlphaFold touted as next big thing for drug discovery — but is it?

今天来精读2023年10月发在《Nature》上的一篇新闻&#xff1a;AlphaFold touted as next big thing for drug discovery — but is it? (nature.com)https://www.nature.com/articles/d41586-023-02984-w Questions remain about whether the AI tool for predicting protein …

Python Windows系统 虚拟环境使用

目录 1、安装 2、激活 3、停止 1、安装 1&#xff09;为项目新建一个目录&#xff08;比如&#xff1a;目录命名为learning_log&#xff09; 2&#xff09;在终端中切换到这个目录 3&#xff09;执行命令&#xff1a;python -m venv ll_env&#xff0c;即可创建一个名为ll…

常用的6个的ChatGPT网站,国内可用!

GPTGod &#x1f310; 链接&#xff1a; GPTGod &#x1f3f7;️ 标签&#xff1a; GPT-4 免费体验 支持API 支持绘图 付费选项 &#x1f4dd; 简介&#xff1a;GPTGod 是一个功能全面的平台&#xff0c;提供GPT-4的强大功能&#xff0c;包括API接入和绘图支持。用户可以选择免…

成都百洲文化传媒有限公司电商新浪潮的领航者

在当今电商行业风起云涌的时代&#xff0c;成都百洲文化传媒有限公司以其独特的视角和专业的服务&#xff0c;成为了众多商家争相合作的伙伴。今天&#xff0c;就让我们一起走进百洲文化的世界&#xff0c;探索其背后的成功密码。 一、百洲文化的崛起之路 成都百洲文化传媒有限…

短视频矩阵系统---php7.40版本升级自研

短视频矩阵系统---php7.40版本升级自研 1.部署及搭建 相对于其他系统&#xff0c;该系统得开发及部署难度主要在各平台官方应用权限的申请上&#xff0c;据小编了解&#xff0c;目前抖音短视频平台部分权限内侧名额已满&#xff0c;巧妇难为无米之炊&#xff0c;在做相关程序…

unity 添加newtonsoft-json

再git url上添加&#xff1a;com.unity.nuget.newtonsoft-json

手机如何设置静态IP地址显示

随着移动互联网的普及&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。在连接无线网络时&#xff0c;我们有时需要设置手机的IP地址为静态&#xff0c;以满足特定的网络需求或解决某些网络问题。本文将指导您如何在手机上设置静态IP地址显示&#xff0c;让您更好地管…