核心内容摘要
ZYNQ实战:UART中断模式下的数据回环与FIFO阈值配置
核心知识点实现方式UPDATE 和 DELETE 依然用sqlite3_exec执行语法和命令行完全一致无需回调函数因为不返回查询结果核心规范必须在 SQL 语句中加 WHERE 条件避免全表修改 / 删除嵌入式中误操作会导致设备数据全丢执行后通过返回值SQLITE_OK判断是否成功无需回调对高频修改的参数如温度建议基于param_name或id条件操作保证精准性。
完整 C 代码示例创建文件sqlite3_c_demo
c#includestdio.h#includestdlib.h#includesqlite
h// 回调函数用于验证UPDATE/DELETE后的结果staticintselect_callback(void*data,intargc,char**argv,char**azColName){printf([%s]\n,(char*)data);for(inti0;iargc;i){// 判空避免空指针printf( %s %s\n,azColName[i],argv[i]?argv[i]:NULL);}printf(\n);return0;}intmain(intargc,char*argv[]){sqlite3*dbNULL;char*err_msgNULL;intretSQLITE_OK;//
打开数据库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
5→
2
0模拟传感器新读数constchar*update_sqlUPDATE device_params SET param_value
2
0, update_ts datetime(CURRENT_TIMESTAMP, 8 hours) WHERE param_name temp;;retsqlite3_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] 温度更新成功
2
5→
2
0\n);//
验证更新结果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;}//
删除数据清理湿度数据模拟无效参数清理constchar*delete_sqlDELETE FROM device_params WHERE param_name humidity;;retsqlite3_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);//
验证删除结果查询所有数据确认湿度记录消失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;}//
关闭数据库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_demo
c -o sqlite3_c_demo3 -lsqlite3运行程序./sqlite3_c_demo3输出如下[INFO]数据库打开成功[INFO]温度更新成功
2
5→
2
0[更新后的温度参数]param_nametemp param_value
2
0[INFO]湿度数据删除成功[删除后的所有参数]id1param_nametemp param_value
2
0update_ts
:45:25[INFO]数据库关闭成功验证结果sqlite3 embedded_db.dbSELECT * FROM device_params;输出如下1|temp|
2