SQLite数据库实现数据增删改查

news2024/10/7 10:26:02

当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。

实现功能:

  • 创建 SQLite 数据库表,用于存储宠物投喂器上传的数据。

  • 实现对数据库表中数据的插入操作,即将从宠物投喂器接收到的数据存储到数据库中。

  • 实现对数据库表中数据的查询操作,包括按照投喂间隔时间、水温、剩余重量等参数进行筛选,以便用户能够查看特定范围内的数据信息。

  • 实现对数据库表中数据的修改操作,即可以修改已经存储的宠物投喂器上传的数据。

  • 实现对数据库表中数据的删除操作,即可以删除已经存储的宠物投喂器上传的数据。

二、SQLite数据库

SQLite是一款轻量级、开源的嵌入式关系型数据库管理系统(RDBMS),设计目标是嵌入式设备或应用程序使用。与传统的客户端/服务器模式不同,SQLite引擎不是一个独立的进程,而是被集成在一个应用程序中。应用程序可以访问SQLite数据库文件,读写其中的数据,从而实现数据的存储和管理。

以下是 SQLite 数据库的特点:

  • 轻量级:SQLite 占用资源较小,运行速度快,并且可以很方便地集成到应用程序中,使其成为一个内嵌的数据库。

  • 无需服务器:SQLite 是一款本地化的数据库,无需专门的服务器进行支持,因此对于小型应用程序来说,是一种非常适合的解决方案。

  • 开源:SQLite 是一款开源的数据库,用户可以免费获取其源代码,并且可以自由地进行修改和定制。

  • 支持 SQL:SQLite 支持完整的 SQL 标准,并且在 SQL 语法和命令方面与其他关系型数据库非常接近,具有较高的兼容性。

  • 可移植性:SQLite 支持多种操作系统和编程语言,如 Windows、Linux、Mac OS X、iOS、Android 等平台,以及 C/C++、Java、Python、C# 等编程语言。

  • 数据库存储方式: SQLite 将数据库存储在单个文件中,用户可以根据需要将其复制或移动到其他位置或计算机中,以方便数据的安全备份和分享。

三、在Qt里使用SQLITE数据库

在 Qt 中,使用 SQLite 数据库的主要流程如下:

(1)导入 SQLite 相关库文件:在 Qt 项目中,需要先导入 SQLite 相关的库文件和头文件,以便在代码中使用 SQLite 的相关函数和类。

需要在项目文件中添加以下语句:

 QT += sql

这样就可以包含 SQLite 数据库支持的相关头文件和类。

(2)创建数据库连接:使用 QSqlDatabase 类可以在 Qt 中创建一个数据库连接。需要设置数据库类型(如 "QSQLITE"),以及数据库文件路径等参数。

代码示例如下:

 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
 db.setDatabaseName("mydatabase.db");

在实际使用时,可以使用绝对或相对路径指定数据库文件路径。

(3)打开数据库:使用 QSqlDatabase 类的 open 函数可以打开数据库连接。在成功打开数据库后,可以执行 SQL 查询语句,读取和修改数据库中的数据。

代码示例:

 if(db.open())
 {
     QSqlQuery query;
     query.exec("CREATE TABLE mytable (id INTEGER PRIMARY KEY, name TEXT)");
     query.exec("INSERT INTO mytable VALUES(1, 'John')");
     query.exec("SELECT id, name FROM mytable");
     while(query.next()) {
         int id = query.value(0).toInt();
         QString name = query.value(1).toString();
         qDebug() << id << name;
     }
 }

以上代码创建了一个名为 "mytable" 的数据库表,并向其中插入了一条记录。随后,执行 SELECT 查询语句读取表中的数据,并将结果输出到控制台中。

(4)关闭数据库:当不再需要使用数据库时,应该使用 close 函数关闭数据库连接,以释放资源。

代码示例:

 db.close();

在以上流程中,使用 QSqlQuery 类可以执行 SQL 查询语句,并获取查询结果。通过 QSqlRecord 类可以访问查询结果中的字段和值。

四、完整代码

下面是 Qt(C++)中利用 SQLite 数据库对宠物投喂器上传的数据进行存储管理的实现代码,包括数据的增删改查功能:

 #include <QtSql>
 #include <QDebug>
 ​
 // 创建或打开数据库连接
 bool createConnection()
 {
     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
     db.setDatabaseName("petfeeder.db");
     if (!db.open()) {
         qDebug() << "Failed to connect database.";
         return false;
     }
     // 创建 petfeeder 表
     QSqlQuery query;
     bool ret = query.exec("CREATE TABLE IF NOT EXISTS petfeeder "
                            "(id INTEGER PRIMARY KEY AUTOINCREMENT, "
                            "interval INTEGER, temperature REAL, weight REAL)");
     if (!ret) {
         qDebug() << "Failed to create table: " << query.lastError().text();
     }
     return true;
 }
 ​
 // 插入数据
 void insertData(int interval, double temperature, double weight)
 {
     QSqlQuery query;
     QString sql = QString("INSERT INTO petfeeder (interval, temperature, weight) "
                           "VALUES (%1, %2, %3)").arg(interval).arg(temperature).arg(weight);
     bool ret = query.exec(sql);
     if (!ret) {
         qDebug() << "Failed to insert data: " << query.lastError().text();
     }
 }
 ​
 // 更新数据
 void updateData(int id, int interval, double temperature, double weight)
 {
     QSqlQuery query;
     QString sql = QString("UPDATE petfeeder SET interval=%1, temperature=%2, weight=%3 "
                           "WHERE id=%4").arg(interval).arg(temperature).arg(weight).arg(id);
     bool ret = query.exec(sql);
     if (!ret) {
         qDebug() << "Failed to update data: " << query.lastError().text();
     }
 }
 ​
 // 删除数据
 void deleteData(int id)
 {
     QSqlQuery query;
     QString sql = QString("DELETE FROM petfeeder WHERE id=%1").arg(id);
     bool ret = query.exec(sql);
     if (!ret) {
         qDebug() << "Failed to delete data: " << query.lastError().text();
     }
 }
 ​
 // 查询数据
 void queryData()
 {
     QSqlQuery query("SELECT * FROM petfeeder");
     while (query.next()) {
         int id = query.value(0).toInt();
         int interval = query.value(1).toInt();
         double temperature = query.value(2).toDouble();
         double weight = query.value(3).toDouble();
         qDebug() << "Id:" << id << "Interval:" << interval << "Temperature:" << temperature << "Weight:" << weight;
     }
 }
 ​
 // 主函数
 int main()
 {
     if (!createConnection()) {
         return 1;
     }
     // 插入数据
     insertData(3, 25.5, 0.2);
     insertData(2, 26, 0.3);
     insertData(4, 24, 0.4);
     // 查询数据
     queryData();
     // 更新数据
     updateData(2, 4, 27, 0.3);
     // 删除数据
     deleteData(3);
     // 查询数据
     queryData();
 ​
     return 0;
 }

在上面代码里,使用 createConnection 函数创建或打开数据库连接,创建名为 petfeeder 的数据表。使用 insertData 函数向数据表中插入数据,使用 updateData 函数更新数据,使用 deleteData 函数删除数据,使用 queryData 函数查询数据,将结果输出到控制台。

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

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

相关文章

【KD】2023 ICML Linkless Link Prediction via Relational Distillation

1、简介 图神经网络(GNN)有很强的链接预测能力,但是其计算依赖于对邻居节点知识的聚合,因此导致其在实际应用中往往有较高的延迟。与GNN不同,多层感知机(MLP)在预测时不依赖于邻居节点信息,因此其推理速度更快,但也在一定程度上影响了其预测准确性。为了同时利用这两…

Linux下如何修改CPU 电源工作模式

最近处理一起历史遗留问题&#xff0c;感觉很爽。 现象&#xff1a; 背景&#xff1a;设备采用ARM&#xff0c;即rk3568处理器&#xff0c;采用Linux系统&#xff1b;主要用于视觉后端处理 现象&#xff1a;当软件运行一段时间&#xff0c;大概1个小时&#xff08;也不是很固定…

安卓开发问题记录:app:checkDebugDuplicateClasses

开发过程中报错&#xff1a; Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.7.0-runtime (androidx.core:core:1.7.0) and support-v4-21.0.3-runtime (com.android.support:support-v4:21.0.3)按网上找到的说法&#xff1a;新引…

Java学习路线大全推荐来啦!

Java作为目前最热门使用最广泛的编程语言之一&#xff0c;许多人都想学习它。但Java学习书籍那么多&#xff0c;如何选择适合自己的呢?在这里&#xff0c;小编将为大家推荐两本Java学习书籍。 1.动力节点Java 《Java从零基础到精通》是一本Java实用教材&#xff0c;由动力节点…

Maven(四)常用命令大全

目录 一、mvn 命令参数二、mvn 插件命令1.介绍2.查看插件的使用文档3.常用的插件命令 官网地址&#xff1a; https://maven.apache.org/官方插件清单&#xff1a; https://maven.apache.org/plugins/index.html Maven 是一个强大的构建工具&#xff0c;它提供了许多命令来进行项…

EasyV用户必须了解的实操方法论|模板复用五步法

本文根据元宝 在模板复用训练课程上的分享整理而成。 从我们模板复用课程上线到现在&#xff0c;每一期我们都在反复强调&#xff1a;**如何让「所有的」EasyV用户都能搭建制作出「可以落地交付」的可视化大屏是我们课程制作的初衷&#xff0c;跳出「大屏搭建 大屏设计」的思维…

【机器视觉系统】NoobVision

NoobVision 基于Qt/C实现的视觉框架平台&#xff0c;已有多款项目成功实施 功能不算非常完善&#xff0c;但架构设计成熟 Q 2903612753

Spring事务的隔离级别介绍说明以及怎么去修改Spring事务的隔离级别

&#x1f600;前言 本篇是Spring 声明式事务系列的最后一篇介绍了Spring事务的隔离级别介绍说明 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的…

SystemVerilog中$timeformat的用法

在SystemVerilog中&#xff0c;输出信息显示时间时&#xff0c;经常会在输出信息格式中指定“%t”格式符&#xff0c;一般情况下“%t”输出的格式都是固定的&#xff0c;但是这样固定的输出显示的时间可能有时会让用户看起来感觉比较诧异&#xff0c;例如下面的示例。 【示例】…

【word密码】设置word只读模式

想要将word文档设置为只读模式&#xff0c;方法有很多&#xff0c;今天小奥超人介绍几个方法给大家。 方法一&#xff1a;文件属性 常见的、简单的设置方法&#xff0c;不用打开word文件&#xff0c;只需要右键选择文件&#xff0c;打开文件属性&#xff0c;勾选上【只读】选…

ROSE75 GAS DM蓝牙5.2双模热插拔PCB

键盘使用说明索引&#xff08;均为出厂默认值&#xff09; 软件支持&#xff08;驱动的详细使用帮助&#xff09;一些常见问题解答&#xff08;FAQ&#xff09;首次使用步骤蓝牙配对规则&#xff08;重要&#xff09;蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功…

助力金融服务行业转型,NETCLOUD的全方位解决方案!

随着科技的飞速发展和数字化时代的到来&#xff0c;金融行业也面临着前所未有的变革和挑战。在这个信息爆炸的时代&#xff0c;数字化转型已经成为金融行业不可忽视的趋势。从传统的银行、保险到投资管理&#xff0c;无一不受到数字化浪潮的影响。那么&#xff0c;为什么金融行…

Android CameraX适配Android13的踩坑之路

AndroidCameraX适配Android13的踩坑之路 前言&#xff1a; 最近把AGP插件升级到8.1.0&#xff0c;新建项目的时候目标版本和编译版本都是33&#xff0c;发现之前的demo使用Camerax拍照和录像都失败了&#xff0c;于是查看了一下官网和各种资料&#xff0c;找到了Android13的适…

中远麒麟堡垒机 SQL注入漏洞复现

0x01 产品简介 中远麒麟依托自身强大的研发能力,丰富的行业经验&#xff0c;自主研发了新一代软硬件一体化统一安全运维平台一-iAudit 统一安全运维平台。该产品支持对企业运维人员在运维过程中进行统一身份认证、统一授权、统一审计、统一监控&#xff0c;消除了传统运维过程中…

十七、地物识别

描述了使用2D卷积神经网络图像识别的全过程。下载和安装标注工具,对图像进行标注,生成标注后的图像。然后对数据进行增强,划分训练集和测试集。最后通过神经网络建立分类模型,对现有图片进行分类应用。 1、Labelme工具 Labelme工具是语义分割标注工具,在地物类型或建…

《论文阅读14》FAST-LIO

一、论文 研究领域&#xff1a;激光雷达惯性测距框架论文&#xff1a;FAST-LIO: A Fast, Robust LiDAR-inertial Odometry Package by Tightly-Coupled Iterated Kalman Filter IEEE Robotics and Automation Letters, 2021 香港大学火星实验室 论文链接论文github 二、论文概…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——性质——第三节——真假推理

文章目录 第三节 性质—真假推理题—性质—两命题间的关系—①先找矛盾&#xff0c;后找包含—矛盾&#xff1a;“所有A都是B”矛盾“有的A不是B”&#xff1b;“所有A都不是B”矛盾“有的A是B”。—包含&#xff1a;“所有A都是B”→“有的A是B”&#xff1b;“所有A都不是B”…

【k8s】基于Prometheus监控Kubernetes集群安装部署

目录 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 二、部署kubernetes集群 三、部署Prometheus监控平台 四、部署Grafana服务 五、grafana web操作 基于Prometheus监控Kubernetes集群安装部署 一、环境准备 IP地址 主机名 组件 192.168.100.131 k8s-ma…

信息与通信工程面试准备——数学知识|正态分布|中心极限定理

目录 正态分布 正态分布的参数 正态分布的第一个参数是均值 正态分布的第二个参数是标准差SD 所有正态分布的共同特征 标准正态分布&#xff1a;正态分布的特例 中心极限定理 理解定义 示例# 1 示例# 2 知道样本均值总是正态分布的实际含义是什么&#xff1f; 正态分…

Python发送QQ邮件

使用Python的smtplib可以发送QQ邮件&#xff0c;代码如下 #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Headersender 111qq.com # 发送邮箱 receivers [222qq.com] # 接收邮箱 auth_code "abc" # 授权…