SQLite数据库

数据库(Database)是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合。常用的数据分为大型、中型和小型数据库。

1. SQLite数据库

SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快。SQLite提供一些C函数接口,可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 SQLite函数,SQLite就会为你操作数据库。


  • 零配置,无需安装和管理配置
  • 储存在单一磁盘文件中的一个完整的数据库
  • 数据库文件可以在不同字节序的机器间自由共享
  • 支持数据库大小至2TB
  • 足够小,全部源码大致3万行C代码,250KB
  • 比目前流行的大多数数据库对数据的操作要快

2. SQLite数据库的使用

2.1 数据库的安装
本地安装:sudo dpkg -i *.deb
在线安装:sudo apt-get install sqlite3
2.2 数据库系统命令
启动SQLite3:sqlite
打开数据库文件:sqlite <*.db> (若文件不存在则自动创建该文件)
显示所有命令:.help
退出sqlite3:.quit
显示当前打开的数据库文件:.database
显示数据库中所有表名:.tables
查看表的结构:.schema <table name>
2.3 数据库sql命令
//sql命令一定要以“;”结束
//以下以表stdinfo为例
创建表: create table stuinfo(id integer, name text, age integer, score float);
插入记录:insert into stuinfo values(1, 'Andy', 30, 99.9);
insert into stuinfo(id, name, score) values(2, 'Amy', 100);
查看记录:select * from stuinfo;
select * from stuinfo where score = 100;
select * from stuinfo where score = 99.9 and name = 'Andy';
select * from stuinfo where score = 99.9 or name = 'Amy';
select * from stuinfo where score > 80 and score < 100;
select name,score from stuinfo; //查询指定的字段
删除记录:delete from stuinfo where id = 1 and name = 'Andy';
更新记录:update stuinfo set age = 20,score = 100 where id = 1;
增加一列:alter table stuinfo add column sex char;
删除一列:create table stu as select id, name, score from stuinfo; //从stuinfo中复制新表(不包含要删除的列)
drop table stuinfo; //删除老的表stuinfo
alter table stu rename to stuinfo; //将新表stu重命名为stuinfo,完成删除列的操作
删除表: drop table stuinfo;
/***设置主键***/
设置主键: create table table_name(column1 datatype PRIMARY KEY, column2 datatype, ……);
//PRIMARY KEY表示该列为该表的“主关键字”,主关键字用于唯一索引表内的某一条记录,主关键字必须唯一且主关键字的列值不能为空
//一张表允许省略主关键字
2.4 SQLite编程接口
  • 打开数据库 sqlite3_open()
函数原型:int sqlite3_open(char *path, sqlite3 **db)
输 入 值:path 数据库文件路径
db 指向sqlite句柄的指针
返 回 值:成功返回0;失败返回错误码(非零值)
  • 关闭数据库 sqlite3_close()
函数原型:int sqlite3_close(sqlite3 *db)
输 入 值:db 指向sqlite句柄的指针
返 回 值:成功返回0;失败返回错误码(非零值)
  • 返回错误信息 sqlite3_errmg()
函数原型:const char *sqlite3_errmg(sqlite3 *db)
输 入 值:db 指向sqlite句柄的指针
返 回 值:返回错误信息
  • 执行SQL操作(使用回调函数)sqlite3_exec()
函数原型:typedef int (*sqlite3_callback)(void*,int,char**,char**);    //定义sqlite3_exec()需要的回调函数的函数指针类型
int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void* para, char **errmsg)
输 入 值:db 需要操作的数据库的句柄指针
sql 需要对数据库执行的SQL语句
callback 回调函数,当执行SQL语句(第二个参数)成功后会自动运行该函数;如果不需要则设为NULL
para 传递给回调函数第一个参数的指针;如果不需要则设为NULL
errmsg 存储错误信息指针
返 回 值:成功返回0;失败返回错误码(非零值)
  • 回调函数
函数原型:int function(void *para, int f_num, char *f_value[], char *f_name[])
输 入 值:para 传递给回调函数的参数(即sqlite3_exec()的第四个参数)
f_num 记录中包含的字段数目(列数)
f_value 包含每个字段值的指针数组(列的值)
f_name 包含每个字段名称的指针数组(列的名称)
返 回 值:成功返回0;失败返回-1
  • 执行SQL操作(不使用回调函数)sqlite3_get_table()
函数原型:int sqlite3_get_table(
sqlite3 *db, /* 数据库句柄 */
const char *zSql, /* 需要对数据库执行的sql语句 */
char ***pazResult, /* 用来指向SQL执行结果的指针 */
int *pnRow, /* 满足条件的记录的数目 */
int *pnColumn, /* 每条记录包含的字段数目 */
char **pzErrmsg /* 错误信息指针的地址 */
)
返 回 值:成功返回0;失败返回错误码(非零值)


关注我的公众号,共同交流学习嵌入式开发相关技术:
数据库|SQLite数据库_linux