适合嵌入式linux方面的数据库SQLite3

 1、数据库的概念

        数据库(Database)既是存储和管理数据的仓库,它按照一定的数据结构来组织、存储和管理数据,以便用户可以通过数据库管理系统(Database Management System, DBMS)等软件进行数据的增、删、改、查等操作。数据库是现代信息系统中非常重要的组成部分,广泛应用于各种领域,如企业管理、电子商务、银行金融、科学研究、医疗健康等。

根据数据模型的不同,数据库可以分为关系数据库、非关系数据库(如NoSQL数据库)等,目前我们常用的数据库一般属于关系数据库,而关系数据库(RDBMS)又拥有如下一些特点:

1. 数据以表格的形式出现
2. 每行为各种记录名称
3. 每列为记录名称所对应的数据域
4. 许多的行和列组成一张表单
5. 若干的表单组成 database

此外又可根据根据其大小不同,又可分为大型数据库、中型数据库和小型数据库。

而我们今天的主角SQLite 便是一个小型的关系型数据库,体型非常小,支持ACID事务。

由于嵌入式方向的产品一般都要低功耗、小内存、使得市面上主流的数据库无法很好的支持,因此,像SQLite这类基于嵌入式linux方向的数据库便出现了,SQLite, Firebird, Berkeley DB, eXtremeDB,都属于嵌入式linux方向的数据库,它们各自都有各自的特点,Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等 、Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中、eXtremeDB是内存数据库,运行效率高、SQLite关系型数据库最大的优点便是体积小,非常契合嵌入式linux方向的需求。(注意:SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中)。

2、什么是SQLite

        SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite  可以直接访问其存储文件,效率非常高。

3、使用SQLite的理由

不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite 不需要配置,这意味着不需要安装或管理。
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
SQLite 是自给自足的,这意味着不需要任何外部的依赖。
SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

4、学习SQLite

4-1、先要安装sqlite3

sudo apt - get install sqlite3
sudo apt - get install libsqlite3 - dev

4-2、使用SQL语句

4-2-1 sqlite3平台下的点命令

首先要进入到sqlite3平台下,命令行输入sqlite3 进入sqlite3环境。

(1).open   打开数据库

数据库文件不存在,则新建并打开 否则直接打开
使用格式: . open 数据库文件名
(2).table / .tables   显示当前数据库中有几张表,分别叫什么
 使用格式:.table / .tables

(3).schema  查看表单中的字段格式
 使用格式:.schema 表名

(4).head on     带字段名称显示数据
使用格式:.head on

(5).mode column  列对齐方式显示数据

(6) .databases    显示用户当前所在数据库的位置
使用格式:.databases

4-2-2 sqlite3数据库数据类型

4-2-3 sqlite3数据库的约束

        约束是在表的数据列上强制执行的规则。这些是用来限制可以插入到表中的数据类型。这确保了数据库中数据的准确性和可靠性。约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。

sqlite3中的常用约束:

NOT NULL 约束:确保某列不能有 NULL 值。
DEFAULT 约束:当某列没有指定值时,为该列提供默认值。
UNIQUE 约束:确保某列中的所有值是不同的。
PRIMARY Key 约束:唯一标识数据库表中的各行记录,
CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。

4-2-4 SQL语句

(1)建表语句

格式: create table if not exists 表名(字段名1 类型 约束, 字段名1 类型 约束...); 
注意:当表已存在,还试图创建时,会直接报错,添加[if not exists]来解决 。

(2)插入语句
格式1:默认全字段插入      insert into 表名 values (字段值1,字段值2...);
格式2:部分字段插入         insert into (字段名1,字段名2...) values (字段值1,字段值2...);

(3)查询语句

格式1:           select 字段值1,字段值2... from 表名;
格式2:           select 字段值1,字段值2... from 表名 where 条件;

搭配select查询时的使用字句:
where子句 (带条件。。。 where u_id > 2 )
limit 子句 (限制打印的数据条目数 limit 2 从当前位置连续打印2个条目数(记录信息))
offset子句 (偏移量 offset 3 从当前位置往后偏移3即第四个位置)
like 子句(模糊查找 %匹配1个或者多个字符 _只匹配一个字符)
order by子句 (ASC升序 DESC降序)

(4)修改语句

格式:  update 表名 set 字段名1 = 新值1, 字段名2 = 新值2... where 条件;
注意:update后面不跟where子句,则导致表中所有用户的信息指定的字段改为默认值。

(5)删除语句

格式:     delete from 表名 where 条件;

删除指定条件行的数据。

(6)删除表

格式:        drop table 表名

删除所指定的表。

4-3:使用API操作数据库

4-3-1:打开数据库

int sqlite3_open(char *path, sqlite3 **db);
功能:打开sqlite数据库
path: 数据库文件路径
db: 指向sqlite句柄的指针
返回值:成功返回0(SQLITE_OK),失败返回错误码(非零值)

4-3-2:执行SQL操作

int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *, char **errmsg);
功能:执行SQL操作
db:数据库句柄
sql:SQL语句
callback:回调函数
void *这里代表传递给回调函数的第一个参数。
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码

回调函数的原型如下:
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);                     //指向返回值类型为int 函数参数分别为(void *, int, char **, char**)的函数

功能:每找到一条记录自动执行一次回调函数。
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1

4-3-3:非回调方式的数据库访问

int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp,int*nrow, int *ncolumn, char **errmsg);
功能:执行SQL操作
db:数据库句柄
sql:SQL语句
resultp:用来指向sql执行结果的指针
nrow:满足条件的记录的数目
ncolumn:每条记录包含的字段数目
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码

4-3-4:释放内存

void sqlite3_free_table(char **result);
功能:释放函数sqlite3_get_table返回的结果内存

4-3-5:关闭数据库

int sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回0,失败返回错误码

4-3-6:打印错误信息

const char *sqlite3_errmsg(sqlite3 *db);
参数:操作数据库的句柄
返回值:导致操作出错的信息,将其返回值直接使用%s打印输出即可

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值