首页 > 数据库 >SQLite数据库实现数据增删改查

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

时间:2023-11-03 14:32:14浏览次数:32  
标签:喂器 SQLite db 数据库 改查 增删 query 数据

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

实现功能:

  • 创建 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 将数据库存储在单个文件中,用户可以根据需要将其复制或移动到其他位置或计算机中,以方便数据的安全备份和分享。

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

三、在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 查询语句,读取和修改数据库中的数据。

SQLite数据库实现数据增删改查_程序员_03

代码示例:

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 函数查询数据,将结果输出到控制台。

标签:喂器,SQLite,db,数据库,改查,增删,query,数据
From: https://blog.51cto.com/u_15641375/8169841

相关文章

  • 升级sqlite
     1.安装依赖包yuminstallsqlite-develyuminstallgcc 2.查看当前的版本[root@localhostdb_dir]#sqlite3-version3.7.172013-05-2000:56:22118a3b35693b134d56ebd780123b7fd6f1497668 3.下载相应的版本wget--no-check-certificatehttps://www.sqlite.org/2023/s......
  • Centos7 部署gitea,使用sqlite作为数据源
    #创建用户git,指定登录shell为Bash,-d指定家目录默认/home/git,-m如果指定的家目录不存在,则创建该目录#踩坑:-r不分配登录shell和家目录useradd-s/bin/bash-d-mgit#编辑/etc/sudoers文件以允许git用户在执行sudo命令时无需密码vi/etc/sudoers在文件中找到以rootALL=......
  • 序列化组件对数据的增删改查
    序列化组件对数据的增删改查1写一个序列化的类,继承Serializer2在类中写要反序列化的字段,想反序列化哪个字段,就在类中写哪个字段,字段的属性(max_lenth......) max_length 最大长度min_lenght 最小长度allow_blank 是否允许为空trim_whitespace 是否截断空白字符......
  • (打标签)增删文件前后缀,并修改文件名为图片格式
    importosfromPILimportImagedefprocess_images(root_dir,prefix_action,prefix,suffix_action,suffix):forfoldername,subfolders,filenamesinos.walk(root_dir):forfilenameinfilenames:file_path=os.path.join(foldername,file......
  • Mybatis,增删改查CRUD
    在第一个Mybatis程序的基础上,继续实现功能一、实现根据id查询用户功能1、首先,在UserMapper里定义一个方法  因为要根据id查询所以要传入一个id2、在xml文件中实现,这里多了一个属性    parameterType  用来写传入的数据类型 3、测试一下,这里我们查询建了一个测......
  • sqlite3 设置返回值为字典类型
    #0.pipinstallpymysql#1.导入pymysqlimportpymsql#2.创建一个数据库连接对象#3.创建游标cursor=conn.cursor()#4.SQL执行cursor.execute(sql)#5.DML提交事务conn.commit#6.关闭游标cursor.close()#7.关闭连接cursor.close()importsqlite3......
  • 得到sqlite的数据条数的代码
    https://blog.csdn.net/weixin_35754962/article/details/129060944importsqlite3conn=sqlite3.connect('example.db')cursor=conn.cursor()#查询数据条数cursor.execute("SELECTCOUNT(*)FROMtable_name")count=cursor.fetchone()[0]pri......
  • litestream sqlite流式复制工具
    litestream是基于golang开发的sqlite流式复制工具,可以方便的复制数据到s3或者一些共享存储中说明litestream使用简单,对于一些基于sqlite的db存储的应用备份,是一个很不错的选择(比如默认的grafana,proxysql)同时litestream对于s3兼容的存储支持也很不错(minio)值得试用下参考......
  • 工具说明书 - DB Browser for SQLite
    https://blog.csdn.net/guoqx/article/details/121761216这里就要介绍一款,可以更加方便直接对SQLite的数据库操作的工具软件:DBBrowserforSQLite。 下载安装:Downloads-DBBrowserforSQLitehttps://sqlitebrowser.org/dl/ 下载64位安装版:DB.Browser.for.SQLite-3.12......
  • 数据增删改查
    1、外键主键:PRIMARYKEY(列名)唯⼀性,不能重复。外键的作⽤是要和另⼀个表的主键保持数据⼀致性,完整性。--创建一个班级表createtableifnotexistsgrade(idintprimarykey,gradeNamevarchar(20));--创建一个学生表createtableifnotexistsstude......