嵌入式Linux学习 - 数据库开发

目录

[一. 在终端的使用](#一. 在终端的使用)

[1. 下载](#1. 下载)

[2. 操作](#2. 操作)

[3. 相关函数](#3. 相关函数)

1.增

[2. 删](#2. 删)

[3. 改](#3. 改)

[4. 查](#4. 查)

[5. 补充函数](#5. 补充函数)

[二. 在软件的使用](#二. 在软件的使用)

[1. 下载](#1. 下载)

[2. 操作](#2. 操作)

[三. 在编程的使用](#三. 在编程的使用)

[1. 下载](#1. 下载)

[2. 相关函数](#2. 相关函数)

[1. 打开](#1. 打开)

[2. 读写执行sql语句](#2. 读写执行sql语句)

[3. 关闭](#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)

相关推荐
梅见十柒2 小时前
UNIX网络编程笔记:共享内存区和远程过程调用
linux·服务器·网络·笔记·tcp/ip·udp·unix
溯光笔记3 小时前
服务器内网穿透NPS搭建过程 - 服务端linux服务器 客户端windows系统 - 溯光笔记
linux·服务器·windows
2501_930124703 小时前
Linux之Shell编程(三)流程控制
linux·前端·chrome
Sadsvit5 小时前
Ansible 自动化运维工具:介绍与完整部署(RHEL 9)
linux·运维·centos·自动化·ansible
偶像你挑的噻5 小时前
linux应用开发-嵌入编程基础
linux
偶像你挑的噻6 小时前
linux应用开发-环境构建
linux
宁清明6 小时前
【小宁学习日记5 PCB】电路定理
学习·pcb工艺
~黄夫人~7 小时前
Nginx Ubuntu vs CentOS 常用命令对照表---详解笔记
运维·笔记·学习·nginx·ubuntu·centos
励志不掉头发的内向程序员7 小时前
STL库——list(类模拟实现)
开发语言·c++·学习
好名字更能让你们记住我7 小时前
Linux网络基础1(一)之计算机网络背景
linux·服务器·网络·windows·计算机网络·算法·centos