全志H616开发学习笔记(七):轻量数据库SQLite
轻量数据库SQLite
基本概念介绍
SQLite
是一款轻量化、易用的数据库。一般用于设备端的数据管理,可以理解成单点的数据库。相比于传统服务器型数据库用于管理多端设备,十分复杂,SQLite
的数据库无服务器,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为应用程序的一部分运行。
下面以MySQL为例对比一下SQLite和传统服务型数据库的优缺点:
SQLite的优点 | SQLite的缺点 | MySQL的优点 | MySQL的缺点 |
---|---|---|---|
基于文件,易于设置 和使用 适合基础开发和测试 轻松携带 使用标准SQL语法进 行微小更改 使用方便 | 缺乏用户管理和 安全功能 不容易扩展 不适合大数据库 无法定制 | 使用方便 提供了许多与数据库相 关的功能 良好的安全功能 易于扩展,适用于大型 数据库 提供良好的速度和性能 提供良好的用户管理和 多种访问控制 | 需要一些技术专业知 识来设置 与传统SQL相比,语 法略有不同 |
基于嵌入式的数据库主要有:
SQLite
,Firebird
,Berkeley DB
,eXtremeDB
Firebird
是关系型数据库,功能强大,支持存储过程,SQL兼容等SQLite
关系型数据库,体积小,支持ACID事务(Atomicity、Consistency、Isolation、Durability)Berkeley DB
并没有数据库服务器的概念,他的程序直接链接到应用程序中eXtremeDB
是内存数据库,运行效率高
SQLite
安装
SQLite
的安装有两种方式,一种是通过apt install sqlite
,从apt
源获取官方编译好的版本(但目前只能获得2.x
版本的);另一种方式是我们手动去下载编译源码,然后自行编译。这里详细介绍一下第二种方式。
- 进入
SQLite
官网,选择合适版本的tar.gz
格式源码包点击下载

然后将下载的文件通过
Mobaxterm
或Ftp
上传至开发板,tar xvf
解压使用
./configure --prefix=/usr/local
命令,配置安装路径为/usr/local
make
命令编译,耗时较长约15分钟make install
,执行安装安装后使用
sqlite 3
命令即可进入sqlite
控制台。
自行编译的方式比较适合上位机,特别是在没有较为完整系统环境的时候(实际应用中会根据具体产品使用场景对完整的系统进行精简,只保留需要的模块),可能会用到交叉编译,速度也更快
SQLite
基本操作练习
数据库的创建和打开
有两种方式,第一种是
sqlite3
进入控制台后使用.open database.db
命令,若存在该文件则打开否则创建;另一种是直接在命令行使用sqlite3 database.db
进入控制台再输入.database
命令,作用同上。数据表的创建与删除
create table report(id Integer,name char,score Integer);
.database
查询所有数据库,.tables
查询当前数据库所有数据表drop table report
数据插入,查询,更新
insert into report values(001,'张三',80)
;insert into report(name,score) values('李四',88)
select * from report;
update report set score=95 where id=001;
表结构的更改
alter table report add column class char;
alter table report drop column class char;
关于SQLite
更多命令及其语法,可以参考SQLite 语法-菜鸟教程
C语言SQLite
编程操作相关API
打开/创建数据库的接口
sqlite3_open(const char *filename, sqlite3 **ppDb)
该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。sqlite3_close(sqlite3*);
该例程关闭之前调用sqlite3_open()
打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完
成。如果还有查询没有完成,sqlite3_close()
将返回SQLITE_BUSY
禁止关闭的错误消息。const char *sqlite3_errmsg(sqlite3*);
sqlite3_errcode()
通常用来获取最近调用的API接口返回的错误代码.

测试代码:
1 |
|
编写好后使用gcc
编译时注意使用-lsqlite3
参数链接sqlite3
库(在/usr/local/lib
下)
执行sql
语句的C接口
这一小节主要学习用于执行SQL
语句的一个C语言API
:sqlite3_exec
原型:
1 |
|
该例程提供了一个执行SQL
语句的快捷方式,SQL
语句具体内容由 sql
参数提供,可以由多个 SQL 语句组合而成,通过英文分号分隔。
在这里,第一个参数 sqlite3
是打开的数据库对象,sqlite_callback
是一个回调,data
作为其第一
个参数,errmsg
将被返回用来获取程序生成的任何错误。
该接口将解析并执行由 sql
参数提供的每条语句,直到字符串结束或者遇到错误为止
下面以一个小demo
为例来学习其基本使用方法:
1 |
|
可以看到,sql_exec
函数能够为我们执行sql
语句,但不直接输出执行结果,而是调用回调函数callback
去处理。
关于callback
,有四个参数,分别的含义和作用:
void *arg
是sqlite3_exec
函数的第四个参数,用于错误消息的传递column_size
:数据库的字段数column_value[]
:列的值,column_name
:字段名字
上方的demo
首先是执行了select
语句,然后将执行结果传递给回调函数处理。当且仅当callback
函数的返回值设为0,才会处理sql_exec
结果的每一行。
执行结果:

在上面的代码中存在一个隐藏问题:errorMsg
一开始是一个野指针,并没有开辟空间,如果直接打印输出的话照理说会报错Segment fault
,但经过测试证明该操作sqlite3_exec
函数本身会为该指针开辟空间
使用sqlite3_exec
创建表并插入数据
下面两个例子参照菜鸟教程编写得来,首先是创建了一个表格(若已存在,则会给出提示信息,并不覆盖原有表),然后向其中插入了一些记录
点击展开
1 |
|