news 2026/5/23 13:52:01

SQLite3学习笔记6:UPDATE(改)+ DELETE(删)数据(C API)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQLite3学习笔记6:UPDATE(改)+ DELETE(删)数据(C API)

核心知识点

  1. 实现方式:UPDATE 和 DELETE 依然用sqlite3_exec执行,语法和命令行完全一致,无需回调函数(因为不返回查询结果);
  2. 核心规范:
    • 必须在 SQL 语句中加 WHERE 条件,避免全表修改 / 删除(嵌入式中误操作会导致设备数据全丢);
    • 执行后通过返回值(SQLITE_OK)判断是否成功,无需回调;
    • 对高频修改的参数(如温度),建议基于param_nameid条件操作,保证精准性。

完整 C 代码示例

创建文件sqlite3_c_demo3.c

#include<stdio.h>#include<stdlib.h>#include<sqlite3.h>// 回调函数:用于验证UPDATE/DELETE后的结果staticintselect_callback(void*data,intargc,char**argv,char**azColName){printf("[%s]\n",(char*)data);for(inti=0;i<argc;i++){// 判空避免空指针printf(" %s = %s\n",azColName[i],argv[i]?argv[i]:"NULL");}printf("\n");return0;}intmain(intargc,char*argv[]){sqlite3*db=NULL;char*err_msg=NULL;intret=SQLITE_OK;// 1. 打开数据库ret=sqlite3_open("embedded_db.db",&db);if(ret!=SQLITE_OK){fprintf(stderr,"[ERROR] 打开数据库失败: %s\n",sqlite3_errmsg(db));sqlite3_close(db);return-1;}printf("[INFO] 数据库打开成功\n");// 2. 更新数据(温度从26.5→27.0,模拟传感器新读数)constchar*update_sql="UPDATE device_params SET param_value = 27.0, update_ts = datetime(CURRENT_TIMESTAMP, '+8 hours') WHERE param_name = 'temp';";ret=sqlite3_exec(db,update_sql,NULL,NULL,&err_msg);if(ret!=SQLITE_OK){fprintf(stderr,"[ERROR] 更新温度失败: %s\n",err_msg);sqlite3_free(err_msg);sqlite3_close(db);return-1;}printf("[INFO] 温度更新成功(26.5→27.0)\n");// 3. 验证更新结果constchar*select_temp_sql="SELECT param_name, param_value FROM device_params WHERE param_name = 'temp';";ret=sqlite3_exec(db,select_temp_sql,select_callback,(void*)"更新后的温度参数",&err_msg);if(ret!=SQLITE_OK){fprintf(stderr,"[ERROR] 验证更新结果失败: %s\n",err_msg);sqlite3_free(err_msg);sqlite3_close(db);return-1;}// 4. 删除数据(清理湿度数据,模拟无效参数清理)constchar*delete_sql="DELETE FROM device_params WHERE param_name = 'humidity';";ret=sqlite3_exec(db,delete_sql,NULL,NULL,&err_msg);if(ret!=SQLITE_OK){fprintf(stderr,"[ERROR] 删除湿度数据失败: %s\n",err_msg);sqlite3_free(err_msg);sqlite3_close(db);return-1;}printf("[INFO] 湿度数据删除成功\n");// 5. 验证删除结果(查询所有数据,确认湿度记录消失)constchar*select_all_sql="SELECT * FROM device_params;";ret=sqlite3_exec(db,select_all_sql,select_callback,(void*)"删除后的所有参数",&err_msg);if(ret!=SQLITE_OK){fprintf(stderr,"[ERROR] 验证删除结果失败: %s\n",err_msg);sqlite3_free(err_msg);sqlite3_close(db);return-1;}// 6. 关闭数据库ret=sqlite3_close(db);if(ret!=SQLITE_OK){fprintf(stderr,"[ERROR] 关闭数据库失败: %s\n",sqlite3_errmsg(db));return-1;}printf("[INFO] 数据库关闭成功\n");return0;}

操作步骤

  1. 编译代码(链接 sqlite3 库):
gcc sqlite3_c_demo3.c -o sqlite3_c_demo3 -lsqlite3
  1. 运行程序:
./sqlite3_c_demo3

输出如下:

[INFO]数据库打开成功[INFO]温度更新成功(26.5→27.0)[更新后的温度参数]param_name=temp param_value=27.0[INFO]湿度数据删除成功[删除后的所有参数]id=1param_name=temp param_value=27.0update_ts=2026-01-2713:45:25[INFO]数据库关闭成功
  1. 验证结果:
sqlite3 embedded_db.db"SELECT * FROM device_params;"

输出如下:

1|temp|27.0|2026-01-2713:45:25
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 11:21:53

HoRain云--IntelliJ IDEA搭建PHP环境全攻略

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

作者头像 李华
网站建设 2026/5/22 0:24:37

一站式解决管理难题,信息化集成方案来袭!

企业信息化集成方案&#xff0c;一站式解决管理难题在当今数字化时代&#xff0c;企业面临着日益复杂的管理挑战。如何实现各部门之间的高效协作、数据的实时共享以及业务流程的自动化&#xff0c;成为了企业发展的关键。而企业信息化集成方案&#xff0c;正是解决这些难题的一…

作者头像 李华
网站建设 2026/5/23 2:20:30

HoRain云--Go语言range关键字使用全解析

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华
网站建设 2026/5/10 16:20:17

计算机毕业设计|基于ssm+ vue网上订餐系统(源码+数据库+文档)

网上订餐 目录 基于ssm vue网上订餐系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于ssm vue网上订餐系统 一、前言 博主介绍&#xff1a;✌️大厂码农|毕设布…

作者头像 李华
网站建设 2026/5/13 23:02:41

你的交易对手是机器:揭秘量化交易的4个“收割”套路与反制策略

为何你的账户总被“监控”&#xff1f;你是否常常有这样的感觉&#xff1a;自己的股票账户仿佛被一双无形的眼睛监控着&#xff0c;总是精准地“一买就跌&#xff0c;一卖就涨”&#xff1f;你以为是运气不佳&#xff0c;但真相可能远超你的想象。你的交易对手很可能根本不是人…

作者头像 李华