当前位置: 首页 > news >正文

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
http://www.jsqmd.com/news/311620/

相关文章:

  • 将京剧智取威虎山,改编成惊险刺激游戏,值得推荐!
  • VCAP4-DCA Beta 考试体验分享与 esxcli 自动化实战(第二、三部分)
  • 2026年行业内优质的不锈钢中厚板实力厂家推荐,耐腐蚀热轧板/不锈钢扁钢,不锈钢中厚板直营工厂有哪些
  • 成本视角下的存储选型:从MinIO迁移到RustFS的经济学分析
  • 数据类型,还是直接标明32位或64位更清晰。
  • 新疆建筑防水优选指南:2026改性沥青防水卷材实力厂家深度解析
  • 2026年主流MES系统厂商推荐指数与综合评分榜:十大厂商价值量化横评
  • 低代码平台,让企业开发变得简单高效
  • 一站式解决管理难题,信息化集成方案来袭!
  • HoRain云--Ubuntu用户名密码修改全攻略
  • HoRain云--IntelliJ IDEA搭建PHP环境全攻略
  • HoRain云--SpringCache整合Redis缓存最佳实践
  • HoRain云--SpringCache与Redis高效整合指南
  • 2026年IOT平台推荐指数与综合评分榜:十大厂商价值量化全解析
  • 【节点】[TangentVector节点]原理解析与实际应用
  • HoRain云--解决8080端口占用的3种高效方案
  • 2026工业AI系统公司推荐指数与综合评分榜:十大厂商量化评估
  • 【2026-01-27】退一步看看
  • 2025年国内有实力的粒子计数器供应厂家排行榜,手持式尘埃粒子计数器/尘埃粒子测试仪品牌电话
  • 基于市场验证的工业AI系统公司排名:十大获客户青睐的解决方案
  • 基于全球灯塔工厂获评案例的实证分析:2026年灯塔工厂咨询服务商市场影响力排名
  • 18款降AI神器大比拼:从SpeedAI到零感,谁是效率之王?
  • 2026年全球灯塔工厂咨询服务商综合实力TOP榜:谁在引领制造业的数字化转型浪潮?
  • 2026年五大精选设计素材网站全推荐:覆盖设计师、美工与运营设计的一站式资源指南
  • 【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现
  • 2026智能工厂建设服务商综合实力榜:九大领军者如何重塑制造未来
  • 从连接到赋能:2026年TOP 8数据采集系统公司核心作用机制解析
  • 2026年数据采集系统公司综合实力TOP 8盘点:谁在引领工业智能化的核心战场?
  • 2026年地暖网片实力厂商综合评估与精选推荐
  • 经得起考验的选择:2026年受大型工业企业青睐的设备管理系统公司TOP榜