嵌入式Linux学习 - 数据库开发
目录
一. 在终端的使用
1. 下载
2. 操作
3. 相关函数
1.增
2. 删
3. 改
4. 查
5. 补充函数
二. 在软件的使用
1. 下载
2. 操作
三. 在编程的使用
1. 下载
2. 相关函数
1. 打开
2. 读写执行sql语句
3. 关闭
一. 在终端的使用
1. 下载
sudo apt-get install sqlite3
关系型数据库 - 管理数据 - 管理表
2. 操作
sqlite3进入软件
一般命令:.help.databases.quit.exit
操作:sql 语句(structure query language)
3. 相关函数
菜鸟网站学习www.runoob.com
1.增
1. create table
- 原型:
CREATE TABLE 表名(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype constraint,
...
)
- 功能:
创建了一张表
- 使用:
create table stu(name, sex, age, score);
sqlite3命令检查:
.tables ? TABLE? 命令查看表的名字
.schema ? PATTERN? 命令查看表的字段
2. insert into
- 原型:INSERT INTO table_name VALUES (value1,value2,value3,...);
- 功能:
插入列的值
- 使用:
insert into stu values("Tom", "man", 18, 90); // 插入列的所有值
insert into stu (name, sex) values("jack", "male"); // 插入列的部分值
插入列的所有值:
插入列的部分值
2. 删
1. delete
功能:删除符合条件的一行
使用:delete from 表名 where 条件
2. drop
功能:删除整个表
使用:drop table 表名
3. 改
1. alter add
功能:添加字段(一列)
使用:alter table 表名 add 列名;
语句注意添加分号
2. update
- 功能:
修改字段
- 使用:
undate 表名 set 列1 = 值1 [, 列2 = 值2, ...] [匹配条件];
修改多个值时用,隔开
- 条件语句:
where 字句
where 列名 操作符 列值
where age > 10
多列:
3. sqlite3暂不支持删除字段
4. 查
1. select
- 原型:select column1, column2,...
- 功能:
查询表中内容
- 使用:
select 列名1, 列名2, ... from 表名 [匹配条件];
select * from 表名; 查看表中所有列信息
sqlite3 命令:
.headers on | off 打开 | 关闭表头
.mode 设置显示的模式
模式: csv以,分割 column以行列分割
模式:
2. 查询匹配条件
1. 部分字段
2. in语句
select * from 表名 where 列名 in(值1,值2, ...);
select 列名1[,列名2.,..] from 表名 where 列名 in(列值1,列值 2, ...);
3. and语句
select * from 表名 where 列1=值1 [ and 列2=值2 and ...];
select 列名1 [,列名2 ,...] from 表名 where 列1=值1 [ and 列2=值2 and...];
4. or语句
select * from 表名 where 列1=值1 [ o r列2=值2 or ...];
select 列名1 [ 列名2 ...] from 表名 列1=值1 [ or 列2=值2 or ...];
5. beteeen ... and ... 范围
select * from 表名 where 列名 between A and B;
select 列名1 [ 列名2 ...] from 表名 where 列名 between A and B;
6. like语句
7. order by + limit
排序:年龄大于等于16的行以年龄排序,显示3个
5. 补充函数
1. 插入时间列
2. 自动增长列
- 原型:create table 表名 (id INTEGER PRIMARY KEY ASC, name char, age int);
- 参数:
INTEGER int写成 INTEGER 才能实现自动增长
PRIMARY KEY 主键,编号作为主键
ASC 自动增长的顺序,ASC 升序
DESC 降序
二. 在软件的使用
1. 下载
通过 sqlitebrowser 软件使用
sudo apt-get install sqlitebrowser
2. 操作
sqlitebrowser 进入软件
可以执行sqlite3相关操作和指令
三. 在编程的使用
1. 下载
sqlit3是第三方提供的功能
sudo api-get install libaqlite3-dev下载相关库文件
2. 相关函数
1. 打开
- 原型:intsqlite3_open(char_name,sqlite3**db);
- 功能:
打开数据库。
- 参数:
db_name 数据库文件名
若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码。
db 数据库标识,此结构体为数据库操作句柄。
通过此句柄可对数据库文件进行相应操作。
- 返回值:
成功返回SQLITE_OK,失败返回非SQLITE_OK。
注:添加头文件#include <sqlite3.h>
编译时需要连接库 -lsqlite3
2. 读写执行sql语句
1. sqlite3_exec
- 原型:int sqlite3_exec(sqlite3 *db,
const char *sql,
exechandler_t callback,
void *arg,
char **errmsg);
- 功能:
执行sql指向的SQL语句,若结果集不为空,函数会调用callback所指向的函数。
- 参数:
db 数据库的标识。
sql SQL语句(一条或多条),以;结尾。
callback 回调函数指针,当这条语句执行后,Sqlite3会去调用提供的函数。
arg 当执行 sqlite3_exec 的时候传递给回调函数的参数。errmsg 存放错误信息的地址, 执行失败时可查询该指针
- 返回值:
成功返回SQLITE_OK,失败返回非SQLITE_OK
回调函数指针: exechandler_t callback;
实现select
- 参数类型:typedef int (*exechandler_t) (void *para,
int n_column,
char **column_value
char **column_name
- 功能:
此函数由用户定义,当sqlite3_exec 函数执行sql查询语句后,结果集不为空时
sqlite3_exec函数会自动调用函数指针,调用时会把结果集的一行信息传给函数指针。
- 参数:
para sqlite3_exec传给此函数的参数,para为任意数据类型的地址。
n_column 结果集的列数。
column_value 指针数组的地址,其存放一行信息中各个列值的首地址。
column_name 指针数组的地址,其存放一行信息中各个列值对应列名的首地址。
- 返回值:
若为非零值,通知 sqlite3_exec 终止回调
2. sqlite3_get_table
- 原型: int sqlite3_get_table(sqlite3 *db,
const char *sql,
char ***resultp,
int *nrow,
int *ncolumn,char **errmsg) ;
- 功能:
执行Sql指向的SQL语句,函数将结果集相关的数据的地址保存在函数的参数中。
- 参数:
db 数据库的标识。
sql SQL语句(一条或多条),以;结尾。
resultp 指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每一行各列的值。
nrow 结果集的行数(不包含列名)。ncolumn 结果集的列数。
errmsg 错误信息。
Sqlite3_free_table 函数:
- 原型:void sqlite3_free_table(char**resultp);
- 功能:
释放 sqlite3_get_table 分配的内存。
- 参数:
结果集数据的首地址。
3. 对比
1. 都可以执行sql语句
2. 区别
select:exec 创建回调函数,每查到一条记录就回调一次
get_table 不需要回调函数,在堆区保存查询的结果,数据量有限适合小规模查询
需要释放堆区空间
3. 关闭
- 原型:int sqlite3_close(sqlite3 *db);
- 功能:
关闭数据库、释放打开数据库时申请的资源。
- 参数:
db 数据库的标识。
- 返回值:
成功返回SQLITE_OK,失败返回非SQLITE_OK
通过终端操作sqlite3,将单词表放入到表中:(sqlite3_exec)