news 2026/2/25 17:19:32

SQLite3学习笔记4:打开和关闭数据库 + 创建表(C API)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQLite3学习笔记4:打开和关闭数据库 + 创建表(C API)

前置知识(C API 核心)

  1. 编译依赖:Ubuntu 下编译 C 代码必须链接 sqlite3 库(-lsqlite3),否则会报 “未定义引用” 错误;
  2. 核心数据类型sqlite3 *是数据库句柄(嵌入式中建议设为静态 / 全局,避免频繁打开 / 关闭);
  3. 错误处理:所有 sqlite3 函数返回值都是 int 型,SQLITE_OK(0)表示成功,其他值为错误码;
  4. 错误信息sqlite3_errmsg(db)返回错误描述字符串,是调试定位问题的核心手段。

核心函数详解

函数名原型核心作用注意事项
sqlite3_openint sqlite3_open(const char *filename, sqlite3 **ppDb);打开 / 创建数据库路径需是可写路径(如/mnt/embedded_db.db),ppDb是输出参数
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传 NULL
sqlite3_errmsgconst char *sqlite3_errmsg(sqlite3 *db);获取错误信息错误时打印,调试必备

完整 C 代码示例

创建文件sqlite3_c_demo1.c

#include<stdio.h>#include<stdlib.h>#include<sqlite3.h>intmain(intargc,char*argv[]){sqlite3*db=NULL;// 数据库句柄(嵌入式中建议设为静态/全局)char*err_msg=NULL;// 错误信息缓冲区(需手动释放)intret=SQLITE_OK;// SQLite函数返回值// 1. 打开/创建数据库(路径和命令行的embedded_db.db一致)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. 定义创建表的SQL语句(和命令行的表结构完全一致)constchar*create_table_sql="CREATE 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语句(callback=NULL,arg=NULL)ret=sqlite3_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. 关闭数据库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_demo1.c -o sqlite3_c_demo1 -lsqlite3
  1. 运行程序
./sqlite3_c_demo1

输出如下:

[INFO]数据库打开/创建成功[INFO]表创建成功(已存在则忽略)[INFO]数据库关闭成功
  1. 验证表是否创建成功(用命令行交叉验证):
sqlite3 embedded_db.db".tables"

输出如下:

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

彻底解决Play Integrity验证限制:自定义ROM用户的5个突破技巧

彻底解决Play Integrity验证限制&#xff1a;自定义ROM用户的5个突破技巧 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 为什么你的自定义ROM总是验证失败&…

作者头像 李华
网站建设 2026/2/21 9:47:25

手把手教你学Simulink--电机电磁兼容与可靠性​场景示例:基于Simulink的电机轴电压与轴电流抑制仿真

目录 手把手教你学Simulink 一、引言:为什么“新电机用半年就轴承烧毁”?——轴电压是隐形杀手! 二、轴电压产生机理:从PWM到轴承电蚀的路径 1. 共模电压来源 2. 耦合路径:寄生电容网络 三、应用场景:新能源汽车驱动电机的轴承保护设计 系统参数 设计目标 四、建…

作者头像 李华
网站建设 2026/2/24 1:31:24

百度网盘命令行工具BaiduPCS-Go:高效文件管理指南

百度网盘命令行工具BaiduPCS-Go&#xff1a;高效文件管理指南 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go BaiduPCS-Go是一款基于Go语言开发的百度网盘C…

作者头像 李华
网站建设 2026/2/20 4:15:34

从零搭建企业级开源仓库管理系统:KopSoft WMS实战指南

从零搭建企业级开源仓库管理系统&#xff1a;KopSoft WMS实战指南 【免费下载链接】KopSoftWms KopSoft仓库管理系统 项目地址: https://gitcode.com/gh_mirrors/ko/KopSoftWms 在数字化转型加速的今天&#xff0c;高效的仓库管理已成为企业降本增效的关键环节。本文将以…

作者头像 李华
网站建设 2026/2/24 0:05:31

如何高效配置微信防撤回补丁:3个步骤轻松掌握消息保护功能

如何高效配置微信防撤回补丁&#xff1a;3个步骤轻松掌握消息保护功能 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/2/24 9:07:25

4个革命性技巧:用Kronos实现智能股票预测的超额收益

4个革命性技巧&#xff1a;用Kronos实现智能股票预测的超额收益 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 价值定位&#xff1a;重新定义金融AI的能力…

作者头像 李华