2026/6/20 0:14:24
网站建设
项目流程
淘客推广网站怎么做的,168分类信息发布网,企业网网站,网站域名注册空间核心知识点
INSERT 实现#xff1a;依然用sqlite3_exec#xff0c;只需把 SQL 语句换成 INSERT 即可#xff0c;和命令行语法完全一致#xff1b;SELECT 实现#xff1a;sqlite3_exec的callback参数是核心 ——SELECT 返回的每一行数据都会触发一次回调函数#xff0c;通…核心知识点INSERT 实现依然用sqlite3_exec只需把 SQL 语句换成 INSERT 即可和命令行语法完全一致SELECT 实现sqlite3_exec的callback参数是核心 ——SELECT 返回的每一行数据都会触发一次回调函数通过回调函数处理查询结果如存储到结构体 / 数组回调函数规则返回值0表示继续处理下一行非 0 表示终止查询参数 1void* data用户自定义数据sqlite3_exec的第 4 个参数参数 2int argc结果集的列数比如 device_params 有 4 列argc4参数 3char** argv每列的数值字符串形式需手动转换类型如 REAL 转 float参数 4char** azColName每列的列名调试 / 日志用。完整 C 代码示例创建文件sqlite3_c_demo2.c#includestdio.h#includestdlib.h#includesqlite3.h// 回调函数处理SELECT查询结果可改为存储到全局数组/结构体// 每查询到一行数据该函数就会被调用一次staticintselect_callback(void*data,intargc,char**argv,char**azColName){// data用户传入的自定义提示信息sqlite3_exec的第4个参数printf([%s]\n,(char*)data);// 遍历每一列打印列名值可解析为对应类型如param_value转floatfor(inti0;iargc;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*dbNULL;char*err_msgNULL;intretSQLITE_OK;// 1. 打开数据库retsqlite3_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_sqlINSERT 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));;retsqlite3_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_sqlSELECT * FROM device_params;;retsqlite3_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_sqlSELECT param_name, param_value FROM device_params WHERE param_name temp;;retsqlite3_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. 关闭数据库retsqlite3_close(db);if(ret!SQLITE_OK){fprintf(stderr,[ERROR] 关闭数据库失败: %s\n,sqlite3_errmsg(db));return-1;}printf([INFO] 数据库关闭成功\n);return0;}操作步骤编译代码必须链接 sqlite3 库gcc sqlite3_c_demo2.c -o sqlite3_c_demo2 -lsqlite3运行程序./sqlite3_c_demo2输出如下[INFO]数据库打开成功[INFO]数据插入成功[查询所有设备参数]id1param_nametemp param_value26.5update_ts2026-01-2713:35:06[查询所有设备参数]id2param_namehumidity param_value61.0update_ts2026-01-2713:35:06[查询温度参数]param_nametemp param_value26.5[INFO]数据库关闭成功验证插入结果sqlite3 embedded_db.dbSELECT * FROM device_params;输出如下1|temp|26.5|2026-01-2713:35:062|humidity|61.0|2026-01-2713:35:06