news 2026/8/4 7:43:18

SQLite3学习笔记5:INSERT(写)+ SELECT(读)数据(C API)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQLite3学习笔记5:INSERT(写)+ SELECT(读)数据(C API)

核心知识点

  1. INSERT 实现:依然用sqlite3_exec,只需把 SQL 语句换成 INSERT 即可,和命令行语法完全一致;
  2. SELECT 实现sqlite3_execcallback参数是核心 ——SELECT 返回的每一行数据都会触发一次回调函数,通过回调函数处理查询结果(如存储到结构体 / 数组);
  3. 回调函数规则
    • 返回值:0表示继续处理下一行,非 0 表示终止查询;
    • 参数 1(void* data):用户自定义数据(sqlite3_exec的第 4 个参数);
    • 参数 2(int argc):结果集的列数(比如 device_params 有 4 列,argc=4);
    • 参数 3(char** argv):每列的数值(字符串形式,需手动转换类型,如 REAL 转 float);
    • 参数 4(char** azColName):每列的列名(调试 / 日志用)。

完整 C 代码示例

创建文件sqlite3_c_demo2.c

#include<stdio.h>#include<stdlib.h>#include<sqlite3.h>// 回调函数:处理SELECT查询结果(可改为存储到全局数组/结构体)// 每查询到一行数据,该函数就会被调用一次staticintselect_callback(void*data,intargc,char**argv,char**azColName){// data:用户传入的自定义提示信息(sqlite3_exec的第4个参数)printf("[%s]\n",(char*)data);// 遍历每一列,打印列名+值(可解析为对应类型,如param_value转float)for(inti=0;i<argc;i++){// argv[i]可能为NULL(字段为空),需做判空处理printf(" %s = %s\n",azColName[i],argv[i]?argv[i]:"NULL");}printf("\n");return0;// 返回0:继续处理下一行;返回非0:终止查询}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. 插入数据(模拟传感器采集的温度/湿度数据)constchar*insert_sql="INSERT INTO device_params (param_name, param_value, update_ts) VALUES ""('temp', 26.5, datetime(CURRENT_TIMESTAMP, '+8 hours')), ""('humidity', 61.0, datetime(CURRENT_TIMESTAMP, '+8 hours'));";ret=sqlite3_exec(db,insert_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");// 3. 查询所有数据(调用回调函数处理结果)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;}// 4. 条件查询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;}// 5. 关闭数据库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_demo2.c -o sqlite3_c_demo2 -lsqlite3
  1. 运行程序:
./sqlite3_c_demo2

输出如下:

[INFO]数据库打开成功[INFO]数据插入成功[查询所有设备参数]id=1param_name=temp param_value=26.5update_ts=2026-01-2713:35:06[查询所有设备参数]id=2param_name=humidity param_value=61.0update_ts=2026-01-2713:35:06[查询温度参数]param_name=temp param_value=26.5[INFO]数据库关闭成功
  1. 验证插入结果:
sqlite3 embedded_db.db"SELECT * FROM device_params;"

输出如下:

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

SpringCloud多平台如何跨平台上传大文件?

大文件传输系统解决方案 背景与需求分析 作为河南某上市集团的项目负责人&#xff0c;我们当前面临一个关键的技术挑战&#xff1a;需要为政府、央企等高端客户构建一个安全可靠的大文件传输系统。经过详细的需求调研&#xff0c;我整理了以下核心需求点&#xff1a; 超大文…

作者头像 李华
网站建设 2026/8/2 22:42:53

鸣潮自动化工具高效指南

鸣潮自动化工具高效指南 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 鸣潮自动化工具是一款基于图像识别技术的游戏辅助…

作者头像 李华
网站建设 2026/7/30 0:49:03

AI视频推镜神器:让画面瞬间拥有电影感的LoRA工具

AI视频推镜神器&#xff1a;让画面瞬间拥有电影感的LoRA工具 【免费下载链接】Motion-Lora-Camera-Push-In-Wan-14B-720p-I2V 项目地址: https://ai.gitcode.com/hf_mirrors/lovis93/Motion-Lora-Camera-Push-In-Wan-14B-720p-I2V 近日&#xff0c;一款名为Motion-Lora…

作者头像 李华
网站建设 2026/7/26 1:46:40

Qwen3-Next-80B:256K上下文推理效率革命

Qwen3-Next-80B&#xff1a;256K上下文推理效率革命 【免费下载链接】Qwen3-Next-80B-A3B-Instruct Qwen3-Next-80B-A3B-Instruct 是一款支持超长上下文&#xff08;最高 256K tokens&#xff09;、具备高效推理与卓越性能的指令微调大模型 项目地址: https://ai.gitcode.com…

作者头像 李华
网站建设 2026/8/3 22:43:11

OpCore Simplify:智能黑苹果EFI构建工具深度解析与实践指南

OpCore Simplify&#xff1a;智能黑苹果EFI构建工具深度解析与实践指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 项目概述&#xff1a;OpenCore…

作者头像 李华