Qt -- 1、QT连接数据库(SQLite3)

173 篇文章 52 订阅
订阅专栏

视频教程链接:https://www.bilibili.com/video/BV1Li4y1f7ho?p=3.

类 QSqlDatabase

在这里插入图片描述
上图中的静态成员函数 addDatabase 的第一个参数 type 表示的是我要连接的这个数据库是什么类型的一个数据库,或者说我连接的是一个什么数据库软件。第二个参数是默认参数,不用管。

类 QSqlDatabase的常用接口

在这里插入图片描述
在这里插入图片描述
上面函数 setDatabaseName 和 removeDatabase 的参数是要打开或关闭数据库文件路径。

下面开始在 QT 软件中来操作一下。

首先要加入头文件 #include <QSqlDatabase>(这里在 main.cpp 中)
在这里插入图片描述
从图中可以看到在头文件下面会有一条黄色的线并且显示没有这么一个文件或目录。那为什么会是这样的呢?
这就要了解一下 QT 的架构,它的整个框架是分模块的。我们常用的有两个模块,分别是 Qt Core 和 QT GUI 模块。
在这里插入图片描述
而 QSqlDatabase 是属于 Qt SQL 这个模块的。因此还要在项目中添加这个模块。那怎么添加呢?我们要在项目下的 xxx.pro 文件中添加一句话。

QT       += sql

如下图所示。
在这里插入图片描述
此时,再在 main.c 中看下。
在这里插入图片描述
这表明添加成功了。

接下来,要创建一个 QSqlDatabase 的对象,但是它不能通过构造函数来创建,需要通过静态函数 addDatabase 来创建 Sqlite3 数据库的连接。

代码如下:

//创建一个 QSqlDatabase 的对象
//但是它不能通过构造函数来创建,需要通过静态函数
//创建Sqlite3数据库的连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

之后,指定要打开哪一个数据库文件,看代码。

//指定要打开哪一个数据库文件(填写该数据库文件的路径)
db.setDatabaseName("/home/chantui/work/code/sqlite3Pro/stu.db");
//判断是否打开成功
if(db.open()==false)
{
    qDebug()<<"打开失败";
}

如果指定路径的数据库文件不存在,将会自动创建一个。
如果想要创建在当前工程目录下,则不需要指定路径,而只写文件名。

db.setDatabaseName("stu.db");

最后,当我们对数据库操作完之后,还要关闭数据库,代码如下。

db.close();
db.removeDatabase("/home/chantui/work/code/sqlite3Pro/stu.db");

代码截图如下:
在这里插入图片描述
运行代码,我们来看下效果。到工程目录下(选择你指定构建器的目录),
在这里插入图片描述

对连接数据库的工作进行封装

在这里插入图片描述

单例模式

图片内容来源链接: https://www.runoob.com/design-pattern/singleton-pattern.html.
在这里插入图片描述
(上图后面,还有一部分关于单例模式的实现方式,可以通过链接调整过去看下,由于本章重点并非放到单例模式上,所以这里不深入往下进行,如果非要区分本节的单例模式的实现属于哪一种,则应该属于懒汉式,不支持线程,是最基本的单例模式的实现方式。)

好,下面来实现下。

首先,创建一个文件,
在这里插入图片描述
这里类名取为 DBHelper (任意取),
在这里插入图片描述
然后点击下一步,直到完成,完成之后,打开 DPHelper.h 文件

#ifndef DBHELPER_H
#define DBHELPER_H

#include <QSqlDatabase>

class DBHelper
{
public:
    //向外界公开一个“获取唯一可用的对象”的成员函数
    static DBHelper* getInstance();

private:
    //创建一个 QSqlDatabase 的对象 db,之后要在构造函数中对 db 对象进行初始化
    QSqlDatabase db;
    static DBHelper* Instance ;
    //因为是单例模式,所以让构造函数为 private,这样该类就不会被实例化
    DBHelper();
};

#endif // DBHELPER_H

在 DPHelper.cpp 中,

#include "DBHelper.h"

DBHelper* DBHelper::Instance=0;

DBHelper* DBHelper::getInstance()
{
    if(Instance==0)
        Instance =new DBHelper();
    return Instance;
}

DBHelper::DBHelper()
{
    //在构造函数中对 db 对象进行初始化
    db = QSqlDatabase::addDatabase("QSQLITE");
}

void DBHelper::createConnection()
{
    //我们需要指定数据库文件
    db.setDatabaseName("tec.db");
    db.open();
}

void DBHelper::destoryConnection()
{
    db.close();
    db.removeDatabase("stu.db");
}

这样就将这个单例给实现了。

那么,在这个单例过程之中,我们又希望通过单例的对象来对这个 db 对象进行创建数据库文件、打开数据库文件和关闭数据库文件的操作。所以要在 DPHelper 类中再提供相关的接口。

在 main.cpp 中,我们首先来包含一下我们创建这个类的头文件 #include “DBHelper.h”。

然后,调用接口来实现数据库的连接和断开。

#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include "DBHelper.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    DBHelper* helper = DBHelper::getInstance();

    helper->createConnection();
    helper->destoryConnection();

    MainWindow w;
    w.show();
    return a.exec();
}

运行代码,如下图所示,数据库文件 tec.db 就被创建出来了。
在这里插入图片描述

Qt下使用SQLite3
06-21
编译环境:QT4.5+qt-creator2.4+arm-linux-gcc 4.3.3 程序是通过在QT槽函数中调用SQLite3的API来实现对数据库中的数据操作,这里我们默认嵌入式Linux中已经移植类SQLite3,程序中将调用SQLite3的库文件。
QtSqlite3
weixin_51883798的博客
12-05 799
结果:"qt_sql_default_connection"
QT连接数据库
2201_76115387的博客
07-24 286
QT连接mySQL数据库
Qt连接数据库
sfdfd6965的博客
06-30 1506
Qt连接数据库
QTSQLITE3数据库
风间琉璃的博客
08-31 4428
数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table)。常见的数据库:大型数据库(大型机) ----------- Oracle(亿级)中型数据库(分布式超大型) -------- mysql(百万级)轻型数据库(嵌入式设备) -------- sqlite(万级)访问数据库使用SQL语句,适用于所有的数据库。......
QT实现连接MySQL数据库以及查询等操作
m0_52709408的博客
07-27 6806
写的时候发现每个表都需要使用数据类型(一维数组、哈希表、二维数组等)进行存储,而且基本上每涉及一个表就需要单独对这个表写增删改查之类的函数,这样造成了非常大的代码冗余,非常臃肿,但是目前我还没有想到什么办法能减少这种冗余简化代码,有一种方法是把数据库中的表对应的在qt中建立数据类,在类中建立对应表中表项的数据类型,之后查询到的数据对应的放到相应的类中,但是这样只是结构清晰了很多但是使用的内存空间还是同样大甚至更多。运行不成功的可能是MySQL数据库的动态库没有导入,可以看一下。来创建数据库对象,使用。
ManaSystem-qt数据库sqlite3增删改查
最新发布
09-09
qt数据库sqlite3增删改查 qt数据库sqlite3增删改查 qt数据库sqlite3增删改查 qt数据库sqlite3增删改查 qt数据库sqlite3增删改查
QtSQlite 数据库 加密 SqliteCipher 实例
09-28
QtSQlite数据库加密SqliteCipher 操作实例,打开多个数据库,附着数据库跨库查询, 对应说明:https://blog.csdn.net/woguanni/article/details/120524602
Qt--master_QT_Qt数据库_
09-29
Qt--master_QT_Qt数据库】项目是一个利用Qt框架和SQLite数据库开发的嵌入式学生管理系统。在本文中,我们将深入探讨Qt框架的核心概念、SQLite数据库的特点以及如何在Qt中与SQLite集成,以实现一个高效的学生管理...
MP3 音乐播放器 - 基于 Qt6 和 SQLite 数据库.zip
08-21
MP3 音乐播放器 - 基于 Qt6 和 SQLite 数据库.zipMP3 音乐播放器 - 基于 Qt6 和 SQLite 数据库.zipMP3 音乐播放器 - 基于 Qt6 和 SQLite 数据库.zipMP3 音乐播放器 - 基于 Qt6 和 SQLite 数据库.zipMP3 音乐播放器 -...
qt-sqlite-database
05-11
总结来说,"qt-sqlite-database"项目展示了如何在Qt环境中利用分层架构(DBC、DAO、VO)与SQLite数据库进行交互。这样的设计使代码更易于理解和维护,同时保持了业务逻辑和数据访问的清晰分离。通过实践和理解这些...
QT连接Mysql数据库(详细成功版)
热门推荐
qwpo135790的博客
04-11 5万+
文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 QT连接Mysql数据库步骤相对比较麻烦,因此写了篇文章将过程呈现给大家,欢迎大家来评论区指导提问。 方法一、直接通过MySQL的驱动加载数据库 示例代码: (1)在.pro文件中添加下列代码: QT +=sql (2)在mainwindow.h文件中添加下列头文件: #include<QSqlDatabase> (3)在main.cpp...
QT数据库的连接,查询和修改
qq_52241267的博客
08-20 7721
一:QT数据库的连接(通过ODBC) 首先在SQL数据库中设置用户名及密码后通过控制面板查找ODBC根据提示完成对QT的连接(具体可自行搜索) ;接下来到qt的main.cpp中输入: QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); //数据库驱动类型为SQL Server,a为设置的数据库名称,可以随便写 qDebug()<<"ODBC driver?"<<db.isValid(); ...
Qt连接数据库,并实现数据库的增删改查
qq_43638158的博客
02-16 8801
根据自己学习的内容,有关QTableView显示数据库,并实现数据库的增删改查,在这里做下总结。
QT中连接并使用SQLite3数据库
weixin_55735677的博客
04-17 2098
文章介绍了QT项目中连接SQLite3数据库,并进行数据查询操作的详细过程。
Qt连接MySQL数据库
BeinWong的博客
01-11 9922
本文基于Qt 5.14.1和MySQL5.5.62通过ODBC将数据库与后端连接在一起。
SQLite3 数据库学习(四):Qt 数据库基础操作
qq_42994487的博客
11-22 979
SQLite3 数据库学习(四):Qt 数据库基础操作
Qt数据库入门:QtSql模块与SQLite连接
3. 设置数据库连接参数,如数据库文件路径(对于SQLite)。 4. 打开数据库连接,使用QSqlDatabase的open方法。 5. 创建QSqlQuery对象,编写并执行SQL语句。 6. 处理查询结果,例如通过QSqlQuery的next方法遍历记录。...
写文章

热门文章

  • C语言基础 -- uint32_t 41033
  • 如何使用网页在线打开.Xmind文件(思维导图文件)和建模文件(.SLDPRT文件和.SLDASM文件) 39267
  • 多层神经网络 —— Sequential模型 28766
  • QT -- 多线程 —— moveToThread 18367
  • 花一天时间体验 wintogo 到最终放弃 17291

分类专栏

  • 笔记 173篇
  • 计算机一级B
  • ESP32-Arduino 1篇
  • STM32
  • 电路
  • 代码编辑软件
  • FreeRTOS
  • 机器学习 19篇
  • 爬虫
  • opencv 3篇

最新评论

  • QT -- 多线程 —— moveToThread

    车辆_小学生: 这好像是假的多线程啊,通过QThread::currentThreadId()输出当前线程数据,发现和主线程是一样的

  • 多层神经网络 —— Sequential模型

    ?John?: 好文,有些我一直没懂的地方讲的挺清楚表情包表情包

  • Qt -两个独立的窗口

    2301_80366833: 写的乱七八糟

  • 多层神经网络 —— Sequential模型

    沐风、轻羽: 写得很清晰,我小白都看懂了,优质好文!

  • Linux--进程的终止(正常和异常)、钩子函数、exit函数和_exit或_Exit函数

    GraduationRick: 出自《UNIX环境高级编程》

大家在看

  • 三石峰物联网云平台,你值得了解
  • 数据结构:实现顺序表的各种基本运算的算法内容:实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型为Elem Type为char) 97
  • 【AI视觉平台搭建】概况了解 557
  • 次基础上设计一个程序exp1-1.cpp 80
  • 豆包MarsCode帮我2小时完成Go语言系统从开发、测试到部署全流程最佳实践,云IDE迁移PHP企业级项目最佳实践

最新文章

  • 江苏省2024年中职职教高考_计算机应用专业综合理论试卷真题讲解
  • OSI参考模型
  • IEEE802标准
2024年13篇
2023年24篇
2022年186篇
2021年131篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuechanba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王闵行区企业网站优化哪家好网站优化刘贺稳排名三门峡网站专业优化鞍山优化网站排名seo网站的优化建议惠州专业网站优化公司如何星力捕鱼手机捕鱼网站优化合肥企业策划网站优化排名绵阳网站建设和优化服务云南省比较好的网站seo优化广安企业网站优化排名网站优化诊断分析报告芜湖网站优化公司汕头怎么优化网站黄岛优化网站公司网站布局优化网站图片描述优化网站优化工作流程姑苏网站优化多少钱望牛墩网站优化的软件企业网站的优化作用网站快速优化排名立择火3星五种优化网站图片的压缩工具靖江企业营销网站如何优化福州网站SEO优化太仓网站排名优化工作室网站路径优化注意什么北京网站优化服务好口碑百度网站优化宿迁网站优化方案香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化