news 2026/6/16 0:19:33

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/6/13 14:02:37

ERNIE 4.5-A3B开放:210亿参数文本大模型免费体验!

ERNIE 4.5-A3B开放&#xff1a;210亿参数文本大模型免费体验&#xff01; 【免费下载链接】ERNIE-4.5-21B-A3B-Base-Paddle 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-21B-A3B-Base-Paddle 百度ERNIE系列最新文本大模型ERNIE-4.5-21B-A3B-Base-Pad…

作者头像 李华
网站建设 2026/6/15 19:25:58

5个实用技巧:uBlock Origin让你高效构建纯净网络环境

5个实用技巧&#xff1a;uBlock Origin让你高效构建纯净网络环境 【免费下载链接】uBlock uBlock Origin (uBO) 是一个针对 Chromium 和 Firefox 的高效、轻量级的[宽频内容阻止程序] 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock uBlock Origin&#xff0…

作者头像 李华
网站建设 2026/6/10 15:19:28

一图秒懂大模型:如何训练一个奖励模型

在大语言模型&#xff08;LLM&#xff09;训练中&#xff0c;奖励模型&#xff08;Reward Model, RM&#xff09;是实现人类反馈强化学习&#xff08;RLHF&#xff09;核心组件之一。本文结合两幅图&#xff0c;详细介绍奖励模型的结构、训练过程及其作用机制。 一、奖励模型的…

作者头像 李华
网站建设 2026/6/15 17:26:32

创新互动:3D抽奖系统如何重塑现代活动沉浸式体验

创新互动&#xff1a;3D抽奖系统如何重塑现代活动沉浸式体验 【免费下载链接】log-lottery &#x1f388;&#x1f388;&#x1f388;&#x1f388;年会抽奖程序&#xff0c;threejsvue3 3D球体动态抽奖应用。 项目地址: https://gitcode.com/gh_mirrors/lo/log-lottery …

作者头像 李华