蓉华教育嵌入式开发系列:sqlite从入门到精通

作者:蓉华教育

2025-03-17

80次阅读

数据库用来存储和管理数据,数据库管理系统是用于对数据进行存储和管理的专门软件,使得管理的数据更加安全,方便和高效。数据库对数据管理往往是通过表(table)来实现的。常见的数据库有:

大型数据库(大型机) ------------ Oracle(亿级)

中型数据库(分布式超大型) ------- mysql(百万级....)

轻型数据库(嵌入式设备) ------ sqlite(万级) 也是一个轻量级关系型数据库。

1.SQLite概述

SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件。

2.SQLite对于其他数据库有什么优势 ?

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)

  • 一个完整的SQLite数据库存储在一个单一的跨平台的磁盘文件上

  • SQLite是非常小的,轻量级的数据库,完全配置时小于400KiB,省略可选功能配置时小于250KiB

  • SQLite是一个自给自足的数据库,这也就意味着不需要任何外部的依赖

  • SQLite事务是完全兼容ACID,允许从多个进程或线程安全访问

  • SQLite支持SQL92(SQL2)标准的大多数查询语言的功能

  • SQLite使用ANSI-C编写的,并提供了简单和易于使用的API

  • SQLite可在UINX(Linux,Max OS-X,Android,iOS)和Windows(Win32,WinCE,WinRT)中运行

3.如何安装SQLite?

在Qt6中,不再支持 SQLite2,只支持 SQLite3 。因此,有两种方式使用 SQLite,一种是在 SQLite 官网安装 SQLite3,另外一种是直接安装 SQLite Expert。

SQLite Expert 内置了 SQLite。这意味着用户在安装 SQLite Expert 后,无需单独安装 SQLite 即可使用其全部功能。内置的 SQLite 引擎使得用户能够直接创建、管理和操作 SQLite 数据库,而不必担心额外的配置和兼容性问题。

4.SQLite的编程操作

API以下是重要的 C&C++ / SQLite 接口程序,可以满足在 C/C++ 程序中使用 SQLite 数据库的需求,以下是 SQLite 官方文档。

在QT环境中进行SQLite编程涉及多个方面,包括但不限于设置环境、创建连接以及执行SQL语句等。

5.如何处理多线程中的SQLite的访问?


线程安全模式配置

SQLite 支持三种不同的线程安全模式:单线程(Single-thread),多线程(Multi-thread)以及串行化(Serialized)4。对于希望在多个线程间共享同一个数据库连接的应用程序来说,应该选择 Multi-thread 或 Serialized 模式。

Single-thread:所有锁都被禁用;此模式下不允许任何线程间的并发作。

Multi-thread:允许多个线程同时拥有打开的数据库连接,但是每个准备语句(Prepared Statement)只能由创建它的那个线程来使用。

Serialized:完全支持跨线程的作,允许任意数量的工作线程执行读写命令而无需额外同步措施。

为了设置这些选项,在初始化时可以通过调用 函数并传递相应的参数来进行全局设定,或者通过 URI 参数指定特定于某个连接的行为。sqlite3_config()

数据库连接池管理

当应用程序运行在一个高负载环境下时,频繁建立和关闭数据库连接会带来性能开销。因此建议采用连接池技术来管理和重用现有的数据库连接实例。Go 语言中的 gokv 库提供了多种存储系统的抽象接口实现,虽然它主要针对键值对型数据结构设计,但对于理解如何构建高效的连接池机制仍然具有参考价值。

错误处理策略

由于网络波动或其他不可预见的原因可能导致某些事务失败,所以应当制定合理的错误恢复流程。这通常涉及到捕获异常情况后的回滚逻辑、延迟重试机制等。Django 的 django-postgrespool 插件展示了良好的做法——利用 SQLAlchemy 提供的强大 ORM 功能实现了优雅的连接池控制及自动化的超时检测与重新尝试功能。

并发查询优化技巧

为了避免死锁现象的发生,应尽量减少长时间持有锁定资源的时间长度,并遵循固定的加锁顺序。另外还可以考虑引入只读副本(replica)的方式分担主服务器的压力,提高整体吞吐量。C++ 中有关算法优化方面的资料可以提供一些启发性的思路用于改进复杂查询效率。


上一篇:蓉华教育嵌入式系列:ORM框架

下一篇:蓉华教育嵌入式开发系列:[6] QT进程与线程


成都IT培训机构蓉华教育值得关注

关注我们

IT培训学校联系方式

微信客服

联系我们

电话:

17358526576

微信:

rhjy-it

QQ:

1811900057

成都校区:

成都市武侯区孵化园9号楼A座2楼

西安校区:

西安市科技二路副66号万汇园区B座

深圳校区:

深圳市福田区彩田南路深圳青年大厦

蓉华教育 - 靠谱的IT培训学校机构 |

版权所有 © 成都蓉华软创科技有限公司 2024  (蜀ICP备20007585号-2)

联系蓉华

成都校区:成都市武侯区孵化园9号楼A座2楼

西安校区:西安市科技二路副66号万汇园区B座

深圳校区:深圳市福田区彩田南路深圳青年大厦

IT培训学校联系方式

rhjy-it

IT培训班联系方式

1811900057

版权所有 © 成都蓉华软创科技有限公司 2024

(蜀ICP备20007585号-2)