2026/2/20 10:39:33
网站建设
项目流程
如何推广网站?,电子商务专业怎么样,软件商店下载安装免费,承包网站开发前置知识#xff08;C API 核心#xff09;
编译依赖#xff1a;Ubuntu 下编译 C 代码必须链接 sqlite3 库#xff08;-lsqlite3#xff09;#xff0c;否则会报 “未定义引用” 错误#xff1b;核心数据类型#xff1a;sqlite3 *是数据库句柄#xff08;嵌入式中建议…前置知识C API 核心编译依赖Ubuntu 下编译 C 代码必须链接 sqlite3 库-lsqlite3否则会报 “未定义引用” 错误核心数据类型sqlite3 *是数据库句柄嵌入式中建议设为静态 / 全局避免频繁打开 / 关闭错误处理所有 sqlite3 函数返回值都是 int 型SQLITE_OK0表示成功其他值为错误码错误信息sqlite3_errmsg(db)返回错误描述字符串是调试定位问题的核心手段。核心函数详解函数名原型核心作用注意事项sqlite3_openint sqlite3_open(const char *filename, sqlite3 **ppDb);打开 / 创建数据库路径需是可写路径如/mnt/embedded_db.dbppDb是输出参数sqlite3_closeint sqlite3_close(sqlite3 *db);关闭数据库必须调用否则内存泄漏关闭前需确保无未完成的 SQL 操作sqlite3_execint sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *arg, char **errmsg);执行 SQL 语句通用接口创建表 / 插入 / 更新 / 删除时无需回调函数callback传 NULLsqlite3_errmsgconst char *sqlite3_errmsg(sqlite3 *db);获取错误信息错误时打印调试必备完整 C 代码示例创建文件sqlite3_c_demo1.c#includestdio.h#includestdlib.h#includesqlite3.hintmain(intargc,char*argv[]){sqlite3*dbNULL;// 数据库句柄嵌入式中建议设为静态/全局char*err_msgNULL;// 错误信息缓冲区需手动释放intretSQLITE_OK;// SQLite函数返回值// 1. 打开/创建数据库路径和命令行的embedded_db.db一致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. 定义创建表的SQL语句和命令行的表结构完全一致constchar*create_table_sqlCREATE TABLE IF NOT EXISTS device_params (id INTEGER PRIMARY KEY AUTOINCREMENT, param_name TEXT NOT NULL, param_value REAL NOT NULL, update_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);;// 3. 执行创建表的SQL语句callbackNULLargNULLretsqlite3_exec(db,create_table_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);// 4. 关闭数据库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_demo1.c -o sqlite3_c_demo1 -lsqlite3运行程序./sqlite3_c_demo1输出如下[INFO]数据库打开/创建成功[INFO]表创建成功已存在则忽略[INFO]数据库关闭成功验证表是否创建成功用命令行交叉验证sqlite3 embedded_db.db.tables输出如下device_params