目录

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

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


一. 在终端的使用

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?        命令查看表的字段

https://i-blog.csdnimg.cn/direct/2fed01870802420c83f78e3dafbea2c9.png

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”);        //  插入列的部分值

插入列的所有值:

https://i-blog.csdnimg.cn/direct/593ccc17621c404190def41a6469f8d7.png

插入列的部分值

https://i-blog.csdnimg.cn/direct/2960bc4fdae04fd68f98969b5b10038f.png

2. 删

1. delete

**功能:**删除符合条件的一行

**使用:**delete from 表名 where 条件

https://i-blog.csdnimg.cn/direct/d3a1c3ec1ba5467292038357f0f3a161.png

2. drop

**功能:**删除整个表

**使用:**drop table 表名

https://i-blog.csdnimg.cn/direct/65416b9c6a7f4f2eb5951db12cf956b6.png

3. 改

1. alter add

**功能:**添加字段(一列)

**使用:**alter table 表名 add 列名;

https://i-blog.csdnimg.cn/direct/ee4537e65b0e4e12bde431ed0fc69adc.png

                                                                                                                              语句注意添加分号

2. update
  • 功能:

        修改字段

  • 使用:

        undate 表名 set 列1 = 值1 [, 列2 = 值2, …] [匹配条件];

                    修改多个值时用,隔开

  • 条件语句:

        where 字句

        where 列名 操作符 列值

        where age > 10

https://i-blog.csdnimg.cn/direct/1cd6bf9f5d104d58867226d6a67d04d5.png

多列:

https://i-blog.csdnimg.cn/direct/069f8b1976b64345ad80d08cd28e07f4.png

3. sqlite3暂不支持删除字段

4. 查

1. select
  • 原型:select column1, column2,…
  • 功能:

        查询表中内容

  • 使用:

        select 列名1, 列名2, … from 表名 [匹配条件];

        select * from 表名;                                                查看表中所有列信息

https://i-blog.csdnimg.cn/direct/13610b9fcbda4bfe90698062e37487a9.png

sqlite3    命令:

.headers on | off                            打开 | 关闭表头

.mode                设置显示的模式

                                                                模式:  csv以,分割                column以行列分割

https://i-blog.csdnimg.cn/direct/328382ee6f874419868f45c9bc0b77ef.png

模式:

https://i-blog.csdnimg.cn/direct/b66e4edba590447bbc8aa925cfcd6171.png

2. 查询匹配条件
1. 部分字段

https://i-blog.csdnimg.cn/direct/6c0504242d0d4576a847555f16df0d2c.png

2. in语句

                 select * from 表名 where 列名 in(值1,值2, …);
                 select 列名1[,列名2.,..] from 表名 where 列名 in(列值1,列值 2, …);

https://i-blog.csdnimg.cn/direct/0a98a135f16240638a6ff4b61d11dac1.png

3. and语句

                select * from 表名 where 列1=值1 [ and 列2=值2 and …];
                select 列名1 [,列名2 ,…] from 表名 where 列1=值1 [ and 列2=值2 and…];

https://i-blog.csdnimg.cn/direct/0f3acdef32b244048eafc3911327a2ba.png

4. or语句

        select * from 表名 where 列1=值1 [ o r列2=值2 or …];
        select 列名1 [ 列名2 …] from 表名 列1=值1 [ or 列2=值2 or …];

https://i-blog.csdnimg.cn/direct/dbccced971824a90b173745bea8797f7.png

5. beteeen … and … 范围

        select * from 表名 where 列名 between A and B;
        select 列名1 [ 列名2 …] from 表名 where 列名 between A and B;

https://i-blog.csdnimg.cn/direct/8d21bda198e2457ebe07954892df542d.png

6. like语句

https://i-blog.csdnimg.cn/direct/f7be83a0f0414d6c8c2e4fe745e5a3e6.png

7. order by  +  limit

        排序:年龄大于等于16的行以年龄排序,显示3个

https://i-blog.csdnimg.cn/direct/be93b0d211b1467ea987e00d77736190.png

5. 补充函数

1. 插入时间列

https://i-blog.csdnimg.cn/direct/0a1f9ecefbd74cfaa26388c08d425c45.png

2. 自动增长列
  • 原型:create table 表名 (id INTEGER PRIMARY KEY ASC, name char, age int);
  • 参数:

        INTEGER                          int写成 INTEGER 才能实现自动增长

        PRIMARY KEY                 主键,编号作为主键

        ASC                                  自动增长的顺序,ASC        升序

                                                                              DESC      降序

https://i-blog.csdnimg.cn/direct/baf9f4447b9e49f18b264d7f64f41cac.png

二. 在软件的使用

1. 下载

        通过 sqlitebrowser 软件使用

        sudo apt-get install sqlitebrowser

2. 操作

        sqlitebrowser 进入软件

https://i-blog.csdnimg.cn/direct/bcdaa6fbc86b4f17ae5d06ae749b1449.png

https://i-blog.csdnimg.cn/direct/7899a9248576459b9be29f3e52e7d073.png

        可以执行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 分配的内存。

  • 参数:

        结果集数据的首地址。

https://i-blog.csdnimg.cn/direct/4ba6d4a4ba9741489a67a1cad411c125.png

3. 对比
  1. 都可以执行sql语句

  2. 区别

    select:exec                创建回调函数,每查到一条记录就回调一次

                 get_table         不需要回调函数,在堆区保存查询的结果,数据量有限适合小规模查询

                                         需要释放堆区空间

3. 关闭

  • 原型:int sqlite3_close(sqlite3 *db);
  • 功能:

        关闭数据库、释放打开数据库时申请的资源。

  • 参数:

        db        数据库的标识。

  • 返回值:

        成功返回SQLITE_OK,失败返回非SQLITE_OK

通过终端操作sqlite3,将单词表放入到表中:(sqlite3_exec)

https://i-blog.csdnimg.cn/direct/82e1fbe5ffec4132adf6161fa103bae2.png

https://i-blog.csdnimg.cn/direct/5ab4d0243b964a0ca75db1625a3cc205.png