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


相关推荐: 《美篇》取消会员自动续费方法  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?  如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  顺丰速运官网查询入口 顺丰物流查询官网入口链接  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  百度竞价WAP显示PC链接问题  如何取消数字签名  苹果官网国补入口在哪  如何在mysql中使用索引提示_mysql索引提示优化方法  AO3中文版手机快速通道_AO3最新稳定链接更新  电脑开不了机怎么办 电脑无法开机的解决方法  《oppo商城》维修服务位置  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  小米倒班助手添加日历提醒  sf漫画官网登录入口直达_sf漫画官方正版网址  Flash AS3.0简易相册制作  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用  《荔枝fm》导出文件教程  使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式  iSpring三分屏制作教程  Yandex浏览器官方入口_Yandex搜索引擎中文版  《原神》月之一版本新增书籍一览  作业帮网页版不用下载入口 在线问老师快速答疑  口腔诊所管理软件推荐  Animex动漫社社登录官网 Animex动漫社资源社入口直达  支付宝登录刷脸不是本人如何解决  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  《饿了么》拼好饭点外卖教程2025  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  《合金装备4》有望推出重制版!制作人发话了  火柴人战争网页版在线玩  J*aScript包管理器_Npm与Yarn对比  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  海外搜索引擎推广效果怎么样,怎么分析效果!  个人所得税办理入口 个人所得税综合所得年度汇算入口  Go Template中优雅处理循环最后一项:自定义函数实践  《波斯王子:失落的王冠》剑术大师打法攻略  Mac怎么关闭按键声音_Mac键盘打字音效设置  《盗墓笔记手游》技能介绍  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录  iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程  苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法  使用jQuery精确检测除指定元素外任意位置的点击事件  抖音号升级企业号怎么改名字?升级企业号有哪些好处? 

 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.