c++如何使用SQLite3进行本地数据存储_c++嵌入式数据库编程


在C++项目中使用SQLite3可实现轻量级本地数据存储,适用于桌面应用与嵌入式系统。1. 通过包管理器或官网下载安装SQLite3开发文件,包含sqlite3.h并链接库文件完成编译配置。2. 使用sqlite3_open()打开数据库连接,若文件不存在则自动创建,操作完成后调用sqlite3_close()关闭连接。3. 利用sqlite3_exec()执行SQL语句建表、插入数据,支持标准DDL与DML操作,如CREATE TABLE和INSERT,并通过返回码判断执行是否成功。

c++如何使用sqlite3进行本地数据存储_c++嵌入式数据库编程

在C++项目中使用SQLite3进行本地数据存储是一种轻量、高效且无需独立数据库服务器的解决方案,特别适合桌面应用、嵌入式系统或需要离线存储的场景。SQLite3是一个C语言库,因此可以直接被C++调用,使用简单,集成方便。

1. 准备工作:安装与配置SQLite3

大多数Linux发行版自带SQLite3开发库,可通过包管理器安装:

# Ubuntu/Debian
sudo apt-get install libsqlite3-dev
<h1>CentOS/RHEL</h1><p>sudo yum install sqlite-devel</p>

Windows用户可从SQLite官网下载预编译的DLL和头文件,或使用vcpkg、MinGW等工具链集成。

在项目中包含以下两个关键文件:

  • sqlite3.h:头文件,声明API接口
  • sqlite3.c 或链接 libsqlite3.a / sqlite3.lib

编译时需链接SQLite3库:

g++ main.cpp -lsqlite3 -o app

2. 打开与关闭数据库连接

使用 sqlite3_open() 打开一个数据库文件,若文件不存在则自动创建:

PHP的使用技巧集 PHP的使用技巧集

PHP 独特的语法混合了 C、J*a、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多。下面介绍了十个PHP高级应用技巧。 1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里

PHP的使用技巧集 440 查看详情 PHP的使用技巧集

#include "sqlite3.h"
#include <iostream>
<p>sqlite3* db;
int rc = sqlite3_open("example.db", &db);</p><p>if (rc) {
std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
return 1;
}
std::cout << "数据库打开成功" << std::endl;</p><p>// 使用完毕后关闭
sqlite3_close(db);</p>

3. 执行SQL语句:建表与增删改查

使用 sqlite3_exec() 可直接执行DDL和DML语句:

const char* sql = R"(
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
);)";
<p>rc = sqlite3_exec(db, sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "建表失败: " << sqlite3_errmsg(db) << std::endl;
}</p>

插入数据示例:

sql = "INSERT INTO users (name, age) VALUES ('Alice', 25);";
rc = sqlite3_exec(db, sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
    std::cerr << "插入失败: " << sqlite3_errmsg(db) << std::endl;
}

4. 查询数据:使用回调函数处理结果

通过回调函数接收查询结果:

static int callback(void* data, int argc, char** argv, char** azColName) {
    for (int i = 0; i < argc; ++i) {
        std::cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << std::endl;
    }
    std::cout << "--------\n";
    return 0;
}
<p>sql = "SELECT * FROM users;";
rc = sqlite3_exec(db, sql, callback, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "查询失败: " << sqlite3_errmsg(db) << std::endl;
}</p>

5. 使用预编译语句(推荐用于参数化操作)

对于频繁执行或带用户输入的SQL,应使用预编译语句防止SQL注入并提升性能:

sqlite3_stmt* stmt;
const char* insert_sql = "INSERT INTO users (name, age) VALUES (?, ?);";
<p>rc = sqlite3_prepare_v2(db, insert_sql, -1, &stmt, nullptr);
if (rc == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, "Bob", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 2, 30);</p><pre class='brush:php;toolbar:false;'>if (sqlite3_step(stmt) != SQLITE_DONE) {
    std::cerr << "执行失败: " << sqlite3_errmsg(db) << std::endl;
}

} sqlite3_finalize(stmt);

查询也可使用预编译方式逐行读取:

const char* select_sql = "SELECT id, name, age FROM users WHERE age > ?;";
rc = sqlite3_prepare_v2(db, select_sql, -1, &stmt, nullptr);
<p>if (rc == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, 20);
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char* name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
std::cout << "ID: " << id << ", 名字: " << name << ", 年龄: " << age << std::endl;
}
}
sqlite3_finalize(stmt);</p>

基本上就这些。C++结合SQLite3实现本地数据存储非常实用,尤其在没有复杂并发需求的场景下。掌握打开数据库、执行语句、使用回调和预编译语句这四个核心环节,就能完成绝大多数嵌入式数据库编程任务。不复杂但容易忽略的是错误检查和资源释放,务必每次调用后判断返回值,并及时调用 finalize 和 close。

以上就是c++++如何使用SQLite3进行本地数据存储_c++嵌入式数据库编程的详细内容,更多请关注其它相关文章!


# 如何使用  # seo新人培训广州seo专  # 河南seo查询怎么操作  # 广告海报案例网站推广  # 免费推广发帖网站是什么  # 银川网站建设机构名单  # 无锡营销推广客服人员  # 绍兴seo效果分析  # 专业的网站建设服务  # 昆明做网站建设思路  # 东莞短视频seo关键词排名优化  # 的是  # 如何实现  # 官网  # 管理器  # 不存在  # linux  # 嵌入式系统  # 使用技巧  # 回调  # 数据存储  # stream  # win  # ios  # c++  # ai  # 工具  # ubuntu  # app  # c语言  # windows  # centos 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: Chart.js 教程:自定义插件实现图表与图例间距调整  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  《淘票票》添加到苹果钱包教程  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  《下一站江湖2》武器获取方法  CSS如何控制元素外边距_margin实现布局间隔  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  鲁班大师乓乓皮肤获取方法  VS Code的时间线(Timeline)视图:您的代码时光机  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  《跳跳舞蹈》循环播放方法  实现可重用自定义Python Range类  Word 2003字体大小设置方法  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  优化长HTML属性值:SonarQube警告与实用策略  银信通自动开通原因揭秘  HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  4399造梦西游3无敌版_4399游戏入口  个人所得税办理入口 个人所得税综合所得年度汇算入口  《七读免费小说》开通会员方法  荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化  顺丰官方查单号入口 顺丰快递单号查询官网入口  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  163邮箱网页版官方登录入口 163邮箱网页版访问页面  创建快捷方式启动系统保护  如何定制PrimeNG Sidebar的背景颜色  《浙里办》电子发票开具方法  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  风神瞳获取全攻略  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  抖音团长模式怎么做?团长模式是什么意思?  获取WooCommerce产品在后台编辑页面的分类ID  口腔诊所管理软件推荐  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  抖音作品被限流怎么办 抖音内容优化与流量恢复方法  中通快递官网指定查询 中通快递单号查询平台入口  C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别  优化 React onClick 事件处理:函数引用与箭头函数的对比  《合金装备4》有望推出重制版!制作人发话了  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  J*a中导出MySQL表为SQL脚本的两种方法  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  windows10怎么关闭自动安装应用_windows10禁止推广应用下载  如何在CSS中使用伪类选择器_hover实现悬停效果  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  《edge浏览器》关闭翻译功能方法  行者app怎样导出日志 

 2025-12-05

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.