news 2026/4/18 9:34:28

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/4/18 8:47:15

计算机毕业设计|基于springboot + vue饮食健康管理系统(源码+数据库+文档)

饮食健康管理 目录 基于springboot vue饮食健康管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue饮食健康管理系统 一、前言 博主介绍&…

作者头像 李华
网站建设 2026/4/18 7:37:38

大学生就业招聘系统(源码+数据库+文档)

大学生就业招聘 目录 基于springboot vue大学生就业招聘系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue大学生就业招聘系统 一、前言 博主介绍…

作者头像 李华
网站建设 2026/4/18 8:00:35

基于springboot 蘑菇百科系统(源码+数据库+文档)

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

作者头像 李华
网站建设 2026/4/18 8:48:56

Scikit-learn API 的哲学与精妙设计:超越“调用即用”的深度解析

Scikit-learn API 的哲学与精妙设计&#xff1a;超越“调用即用”的深度解析 引言&#xff1a;为什么Scikit-learn的API成为机器学习的事实标准&#xff1f; 在机器学习领域&#xff0c;Scikit-learn的API设计几乎成为了行业事实标准。根据2023年Stack Overflow开发者调查&…

作者头像 李华
网站建设 2026/4/16 23:07:37

告别PPT焦虑:百考通AI如何用智能化重塑演示文稿创作流程

在技术分享、项目汇报与学术交流日益频繁的今天&#xff0c;一份逻辑清晰、视觉专业的演示文稿已成为传递思想、展示成果不可或缺的载体。然而&#xff0c;许多开发者、研究员及职场人依然深陷于“内容整理-寻找模板-手动排版”的低效循环中&#xff0c;耗费大量本应用于技术钻…

作者头像 李华