qt开发中的sqlite数据库使用

Qt C++ 数据库开发实战:SQLite 封装 + 数据绑定避坑指南 本文介绍了Qt C++中使用SQLite数据库的优化实践。首先概述了Qt操作SQLite的核心类(QSqlDatabase、QSqlQuery等)及基础流程,然后提出直接使用原始API存在的问题,如代码冗余和SQL注入风险。重点展示了如何封装SQLite操作:采用单例模式设计SqliteManager类,实现线程安全的数据库连接管理,提供统一的CRUD接口和错误处理机制。封装后的代码解决了原始API的痛点,提高了开发效率和安全性。通过这种封装方式,开发者可以更优雅地在Qt项目中集成SQLite数据库。 阅读详情

    Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样)。关于Sqlite和Qt的千丝万缕的故事,有机会再说(各位看官查一查也可以自己search一下)。这里简单说说Sqlite数据库的用法吧。

一、sql语句和部分接口函数

1、在.pro文件中记得增加 :

QT       += core gui sql
 

2、sqlite数据库的增删查改【接口函数参见代码】

  1. #ifndef SQLITEDBAOPERATOR_H
  2. #define SQLITEDBAOPERATOR_H
  3. #include"generalheaders.h"
  4. #include <QSqlDatabase>
  5. #include <QSqlQuery>
  6. #include <QSqlQueryModel>
  7. #include <QDebug>
  8. #include <QSqlError>
  9. class SqliteDBAOperator
  10. {
  11. public:
  12. SqliteDBAOperator();
  13. ~SqliteDBAOperator();
  14. public:
  15. //创建数据库并建立连接
  16. bool OpenDb(void);
  17. //创建数据表(student)
  18. void createTable(void);
  19. //在表格中增加新的字段
  20. void addNewcolumn(QString &columnNameAndproperty);
  21. //查询和显示结果
  22. void queryTable(QString& str);
  23. //判断数据表是否存在
  24. bool IsTaBexists(QString& Tabname);
  25. //插入数据
  26. void singleinsertdata(w2dba &singledb);//插入单条数据
  27. void Moreinsertdata(QList<w2dba> &moredb);//插入多条数据
  28. //删除数据
  29. void deletedata();
  30. //修改数据
  31. void updatedata();
  32. //关闭数据库
  33. void closeDb(void);
  34. private:
  35. QSqlDatabase db;//用于建立和数据库的连接
  36. };
  37. #endif // SQLITEDBAOPERATOR_H

这里w2dba 是自己定义的一个结构体类型的数据。各位可以根据自己实际需要修改。 因为c++开发面向对象的思想,所以我个人通常是在确定一个对象后,再思考这个对象的衣食住行、拉屎放屁、能够公开交流的、或者只能私有的都有哪些东西,接着根据这个对象的应有的特点,编写对应的函数尽量让这个对象鲜活饱满,但是春光不会外泄出来(==》纯属小弟个人微不足道的理解,不喜勿喷。更多精彩画面,自行脑补)。

 

  1. /*Sqlite数据库操作*/
  2. #include "sqlitedbaoperator.h"
  3. #include"generalheaders.h"
/*构造函数中初始化数据库对象,并创建连接*/
  1. SqliteDBAOperator::SqliteDBAOperator()
  2. {
  3. QSqlDatabase database;
  4. if (QSqlDatabase::contains("qt_sql_default_connection"))
  5. {
  6. database = QSqlDatabase::database("qt_sql_default_connection");
  7. }
  8. else
  9. {
  10. //建立和sqlite数据的连接
  11. db = QSqlDatabase::addDatabase("QSQLITE");
  12. //设置数据库文件的名字
  13. QString dbname = QDir::currentPath() +QString("/")+ QString("MACAddrs.db");
  14. db.setDatabaseName(dbname);
  15. }
  16. }
 
  1. /*析构函数关闭数据库连接*/
  2. SqliteDBAOperator::~SqliteDBAOperator()
  3. {
  4. db.close();
  5. }
  6. //打开数据库
  7. bool SqliteDBAOperator::OpenDb(void)
  8. {
  9. //打开数据库
  10. if(db.open() == false){
  11. qDebug() << "连接数据失败!";
  12. return false;
  13. }
  14. qDebug() << "连接数据库成功";
  15. return true;
  16. }
  17. //判断数据库中某个数据表是否存在
  18. bool SqliteDBAOperator::IsTaBexists(QString& Tabname)
  19. {
  20. QSqlDatabase db = QSqlDatabase::database();
  21. if(db.tables().contains(Tabname))
  22. {
  23. return true;
  24. }
  25. return false;
  26. }
  27. //创建数据表
  28. void SqliteDBAOperator::createTable(void)
  29. {
  30. //用于执行sql语句的对象
  31. QSqlQuery query;
  32. //构建创建数据库的sql语句字符串
  33. QString str = QString("CREATE TABLE MACAddrs (\
  34. ID INT PRIMARY KEY NOT NULL,\
  35. Type TEXT NOT NULL,\
  36. ProduceTime TEXT NOT NULL)");
  37. //执行sql语句
  38. query.exec(str);
  39. }
  40. void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)
  41. {
  42. }
  43. //查询和显示结果
  44. void SqliteDBAOperator::queryTable(QString& str)
  45. {
  46. QSqlQuery query;
  47. //构建创建数据库的sql语句字符串
  48. str = QString("SELECT ID,Type,MACADDR FROM MACAddrs");
  49. //执行sql语句,并将结果集保存到model
  50. query.exec(str);
  51. }
  52. //单条插入
  53. void SqliteDBAOperator::singleinsertdata(w2dba &singledb)
  54. {
  55. QSqlQuery query;
  56. query.prepare("INSERT INTO MACAddrs VALUES (:ID,:Type,:ProduceTime)");
  57. query.bindValue(":ID", singledb.id);
  58. query.bindValue(":Type", singledb.type);
  59. query.bindValue(":ProduceTime",singledb.prodceTime);
  60. query.exec();
  61. }
  62. //多条插入
  63. void SqliteDBAOperator::Moreinsertdata(QList<w2dba>& moredb)
  64. {
  65. QSqlQuery query;
  66. query.prepare("insert into MACAddrs values (?,?,?,?,?,?,?,?)");
  67. QVariantList idlist,snlist,typelist,MACAddrlsit,produceTimelist,Pieceslist,Operatorlist,OperateStatlist;
  68. for(int i=0; i< moredb.size(); i++)
  69. {
  70. idlist << moredb.at(i).id;
  71. typelist << moredb.at(i).type;
  72. produceTimelist << moredb.at(i).prodceTime;
  73. }
  74. query.addBindValue(idlist);
  75. query.addBindValue(MACAddrlsit);
  76. query.addBindValue(produceTimelist);
  77. if (!query.execBatch())
  78. {
  79. qDebug() << query.lastError();
  80. }
  81. }
  82. //删除一条数据
  83. void SqliteDBAOperator::deletedata()
  84. {
  85. //比较简单,自行补充
  86. }
  87. //修改
  88. void SqliteDBAOperator::updatedata()
  89. {
  90. //比较简单,自行补充
  91. }
  92. void SqliteDBAOperator::closeDb(void)
  93. {
  94. db.close();
  95. }

这部分可能稍微有点意思的就是带参SQL语句的编写,在数据的单条插入和多条插入中,使用了两种不同的方法,各位可以自行查看。

 

二、接口函数的检测

1、windows下sqlite数据库的安装:

   (1) 前往www.sqlite.org.com下载相应的数据库文件,然后在创建路径并在 c:\sqilte3 路径下将文件解压(路径可自己定义);

(2)设置环境变量,将数据库路的路径增加到PATH变量下。

 

(3)环境配置完成,重启电脑,配置生效。

(4)数据库操作

    1>创建或打开数据库

通过cd 命令到.db数据库文件所在的目录下,如果没有文件自己创建一个。

这里在C盘的根目录下创建一个test.db的数据库文件

敲击回车后进入sqlite数据库,显示如下:

(2)前面简单的数据库基本配置工作已经完成,现在开始数据库的操作部分

首先,我们要创建一张数据表:

sql语句:

 

CREATE TABLE MACAddrs ( ID INT PRIMARY KEY NOT NULL,Type TEXT NOT NULL,ProduceTime TEXT );

 

查看表格是否创建成功 以及表头内容:

.tables

.schema

 

 

 

 

 

QT上位机开发(数据库sqlite编程) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编写软件的时候,如果用户的数据比较少,那么用json保存是非常方便的。但是一旦数据量大了之后,建议还是用数据库来进行管理比较好。数据库在增、删、改、查这方便还是比较好用的。目前,有一种小型的开源数据库sqlite,特别适合大家来使用。它是嵌入在软件程序里面的。和mysql不一样,mysql是单独一个数据库服务器。 阅读详情

相关推荐

Qt与SQLite数据库集成开发实战Demo

Qt 是一个功能强大且广泛使用的 C++ 跨平台应用开发框架,以其统一的 API、丰富的类库和高效的 GUI 设计能力著称。它不仅支持桌面平台(Windows、Linux、macOS),还可用于嵌入式系统与移动设备开发。与 Qt 集成的 SQLite 数据库,则是一款轻量级、零配置、事务型嵌入式数据库引擎,适用于小型至中型数据管理场景。其无需独立服务器进程、数据库以文件形式存储的特性,使其在本地应用、移动应用和快速原型开发中备受青睐。

weixin_28949937的博客 1091

Qt下Sqlite数据库的操作(1)

Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样)。关于Sqlite和Qt的千丝万缕的故事,有机会再说(各位看官查一查也可以自己search一下)。这里简单说说Sqlite数据库的用法吧。 一、sql语句和部分接口函数 1、在.pro文件中记得增加 : QT ...

Mr.Sugarcane 2万+

掌握Qt与SQLite的集成:跨平台应用数据库开发

Qt是一个跨平台的C++应用程序开发框架,广泛应用于GUI应用程序和独立的桌面软件开发。它由挪威的Trolltech公司开发,后被Digia收购,并最终由The Qt Company维护。Qt的核心是其模块化设计,它提供了丰富的组件和接口用于处理图形界面、网络通信、多线程、数据库连接等功能。对于开发者而言,Qt框架的跨平台特性意味着只需要编写一次代码,就可以编译成在多个操作系统上运行的程序,极大地降低了多平台应用开发的复杂性。是 Qt 框架提供的一个数据库抽象层,用于与数据库管理系统交互。

weixin_42452483的博客 774

Qt操作SQLite数据库

Qt操作SQLite数据库

m0_60259116的博客 3388

Qt与SQLite数据库开发实战教程

SQLite是一种轻量级、自包含、无服务器的嵌入式关系型数据库引擎,其核心设计理念是“简单即高效”。它将整个数据库(包括表结构、索引、触发器和数据)存储在一个跨平台的单磁盘文件中,无需独立的数据库服务器进程或复杂配置即可运行。这种零配置特性使其在桌面应用、移动设备(如Android、iOS)及嵌入式系统中广泛应用。// 示例:SQLite创建数据库文件(由Qt自动完成)// 指定单文件路径该模型极大简化了部署与数据迁移流程。

weixin_30021053的博客 667

Qt智能停车系统开发解析:工程结构、SQLite数据库与打包部署

智能停车管理系统是物联网与桌面应用结合的典型场景,其核心在于用户界面、业务逻辑与数据存储的协同设计。在面向 C++ 的 Qt 环境下,开发者常借助 QSqlQuery 操作 SQLite 数据库,实现用户登录验证、车位状态刷新、车辆信息修改等功能。而合理的工程结构划分(如客户端与服务端分离)以及参数化查询的有效使用,直接关系到系统的可维护性与数据安全性。围绕本地数据库文件的设计与发布部署,还需要解决路径编码、并发访问、依赖动态库等实际问题。本文以一套基于 Qt 的智能停车系统为例,从 .pro 构建配置、U

weixin_42186387的博客 278

Qt下Sqlite数据库操作

Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样)。关于Sqlite和Qt的千丝万缕的故事,有机会再说(各位看官查一查也可以自己search一下)。这里简单说说Sqlite数据库的用法吧。 一、sql语句和部分接口函数 1、在.pro文件中记得增加 : QT += core gui sql 2、sqlite数据库的增删查改【接口函数参见代码】 ...

u011555996的博客 1016

Qt接入SqliteCipher加密SQLite数据库实践指南

本地数据库加密是桌面客户端数据安全的重要防线。SQLite作为轻量级嵌入式数据库,其明文存储特性使得数据泄露风险升高。SqliteCipher作为一种SQLite页级加密扩展,通过在存储层对数据页进行加密,确保没有密钥时无法读取文件内容。在Qt开发场景中,接入SqliteCipher可实现透明加密、多库管理以及跨库查询。借助ATTACH DATABASE语法,开发者能在同一连接中关联多个加密库,实现跨库JOIN和事务操作。但要避开的坑不少:与SQLCipher不兼容、密钥派生参数快照、Qt默认的QSQLIT

weixin_33507732的博客 224

Qt怎么操作SQLite数据库

Qt怎么操作SQLite数据库

m0_73443478的博客 1282

基于Qt+SQLite的简单的学生信息管理系统c++

用c++和数据库Sqlite实现一个“学生信息管理”软件 (1) 增加 (2) 删除 (3) 列表显示 (4) 查询(按名称匹配) (5) 数据存盘(永久化存储) (6) 设置与显示头像 (一寸照片, JPG)

sqilte3嵌入式数据库移植

自己写的sqilte3嵌入式数据库移植说明文档,比较详细,希望对大家有用。

QT开发:QT数据库操作与SQLite集成

SQLite是一个轻量级的数据库引擎,它以源代码库的形式提供,可以嵌入到各种应用程序中,无需单独的服务器进程或系统管理。SQLite支持SQL 92标准,提供了事务处理、用户自定义函数、触发器等功能,同时具有跨平台的特性,可以在Windows、Linux、Mac OS X等操作系统上运行。由于其轻量级和高效性,SQLite被广泛应用于移动设备、嵌入式系统以及桌面应用程序中,如QT开发环境。

kkchenjj的博客 1887

【RViz2】导入urdf模型时报错:Could not load resource xxx,Unable to open file xxx,Error retrieving file xxx

初学ROS2,想要在RViz2中显示urdf模型。其中.urdf文件引用了外部的meshes文件夹。

qq_43557907的博客 9486

QT下SQLite应用(二)

Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的库和工具,用于开发GUI应用程序、

weixin_64581379的博客 1718

STM32与FreeRTOS:基于TIM6的高精度系统时间获取实践

本文详细介绍了在STM32与FreeRTOS环境下,基于TIM6定时器实现高精度系统时间获取的实践方法。通过复用FreeRTOS的TIM6硬件资源,开发者可以高效获取毫秒级和微秒级系统时间,同时解决时间溢出和中断处理等关键问题。文章还提供了CubeMX配置技巧、代码实现及性能优化建议,适用于嵌入式系统开发中的精确时间管理需求。

weixin_29169505的博客 357

gcc/g++ 链接库的编译与链接

gcc/g++ 链接库的编译与链接 surgewong@gmail.com http://blog.youkuaiyun.com/surgewong       程序编译一般需要经预处理、编译、汇编和链接几个步骤。在实际应用中,有些公共代码需要反复使用,就把这些代码编译成为“库”文件。在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态(链接)库,其特点是可

Surge 4万+

Qt 与 SQLite 嵌入式数据库开发

Qt 与 SQLite 的结合为嵌入式数据库应用开发提供了强大而灵活的解决方案。SQLite 的轻量级特性与 Qt 的跨平台能力相得益彰,使开发者能够轻松构建高效、可靠的数据驱动应用。通过合理使用事务、索引、全文搜索等高级特性,并采用适当的性能优化策略,可以充分发挥 SQLite 在嵌入式环境中的优势。

编程与实战的博客 717

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

939

Linux Qt开发 Day2————SQLITE、DB安装 TCP/IP学习

QT .pro文件中需要加入network。

2301_76599384的博客 50

深入解析 Multi-Agent 协同决策机制与架构设计

让我们从一些基础定义开始,为后续的讨论建立共同的语言。在计算机科学和人工智能领域,智能体(Agent)是指一个能够感知环境、做出决策并执行动作的实体。智能体是任何可以通过传感器感知环境,并通过执行器作用于该环境的事物。atπstat​πst​sts_tst​是时刻ttt的环境状态(或智能体的观测)π\piπ是智能体的策略(Policy),即从状态到动作的映射ata_tat​是智能体在时刻ttt选择执行的动作多智能体系统(MAS)

AI天才研究院 540

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

C++操作sqlite完整例子 QT操作sqlite简单例子 C++快速开发sqlite源码 QT快速入门操作数据库的demo QT漂亮qss QT模仿element UI 漂亮QTableView

C++操作sqlite完整例子 QT操作sqlite简单例子 C++快速开发sqlite源码 QT快速入门操作数据库的demo QT漂亮qss QT模仿element UI 漂亮QTableView element UI QSS qss快速开发

weijia3624的专栏 7505

LIS2DH三轴加速度传感器原理图设计,已量产(加速度传感器)

最近在做一款可穿戴设备原型时,选了 LIS2DH 这款加速度计 —— 比起之前常用的 ADXL345,它在低功耗和稳定性上的优化刚好戳中了可穿戴设备 “续航 + 可靠” 的核心需求。下面结合这次画的原理图,聊聊这个小模块的硬件设计细节。

不脱发的程序猿 388

使用Qt开发应用程序时,使用MySQL数据库还是使用Qt自带的SQLite数据库呢,用哪个会方便简单

使用Qt开发应用程序时,使用MySQL数据库还是使用Qt自带的SQLite数据库呢,用哪个会方便简单? 请教大家,使用Qt开发应用程序时,使用MySQL数据库还是使用Qt自带的SQLite数据库呢,用哪个会方便简单? 主要是便于上手;出现 bug的几率 …显示全部​ 拿人钱财替人消灾,人生江湖如此,程序江湖亦如此! 11 人赞同了该回答 Qt的数据库模块已经把数据库的操作全部封装了一遍,非常好,你不必关心细节,无论是sqlite还是mysql,代码都是一模一样的, 所以不必关心,你应该关心..

a1317338022的博客 1036

一篇文章认识《双目立体视觉》

双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,具有深度的信息;单目视觉只能看到二维的物体。 1)双目摄像头 2)双目相机基线 3)打开双目摄像头 4)双目测距 视差disparity、 极线约束、 极线校正/立体校正、 a.双目标定 b.双目矫正 c.立体匹配 d.双目测距(三角测量) e.测距效果 立体视觉方法评测网站

黎国溥 7958

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

软件设计开发笔记4:QT操作SQLite数据库

SQLite是一款开源、轻量级、跨平台的数据库,无需Server,无需安装和管理配置。它的设计目标是嵌入式的,所以很适合小型应用,也是Qt应用开发种常用的一种数据库。我们先设计一个简单的操作界面,最上面一行是六个操作按钮,分别实现数据库的连接、表格创建、数据查询,插入数据、修改数据以及删除数据。中间文纸是两个输入框,分别是输入姓名和年龄。最下面是一个图标显示。

木南创智 1593

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: linux 服务器配置selenium chromedriver
下一篇: Qt开发从开门到入门
耳语吖
博客等级 码龄9年 215粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值