linux新建文件夹_一站学习sqlite3数据库之从安装、使用入门到开发(Linux版)

b3199c1b47967586a55f4a3fe57998ed.png

SQLite 是一个库,实现了无服务器的、零配置的、事务性的 SQL 数据库引擎。

同时SQLite 是在世界上最广泛部署的 SQL 数据库引擎,因此我们一起来看一下sqlite数据库的搭建及入门(Linux版本)

小白请从上向下看,大佬请看最下方的简洁版本谢谢,非战斗人员请离开,嘻嘻。

一、要知道自己的系统中有没有安装

在当前的虚拟机的终端上输入sqlite3 xxx.db

如果出现以下现象就是已经安装:

fd010b2cdf7b68291f5c4ef68c5aa0b6.png

如果出现以下现象就是未安装:

cd0e06873dc77250c41a39a849f72e3f.png

二、如何安装sqlite3数据库管理系统

1.可以使用更新源中的包进行下载安装:

sudo apt-get install sqlite3

以上这种方式需要你的更新源正常

2.可以选择手动安装

2.1先下载好安装包

cbc28d95b8174184c6b53b01aeeeab4b.png

2.2将安装包放在你的虚拟机中(你可以选择直接拖拽,也可以选择使用samba服务器直接复制到你的虚拟机上的samba服务器共享的文件夹中)

9d49101711a01e227e8ed0779596c2ef.png

直接拖拽windows--linux

2272754290935ae88022405b7db72f38.png

使用访问服务器的共享文件夹复制粘贴

2.3解压(使用指令的形式解压)

先ls看一下当前是否有这个压缩包

接下来进行指令解压

tar zxvf sqlite-autoconf-3080301.tar.gz

ac02ee1cb2d2291ae80c425ccf2ccaee.png

这个时候你ls看一下,当前就应该有一个解压好的文件夹

510653edcbf07e27c5fbd3054d172b41.png

2.4进入到解压好的文件夹中

cd sqlite-autoconf-3080301

79a5bc2603a43ec6deb127e9f34a2300.png

2.5输入./configure

2a25880f57e30e7ab17735dc5bb2b7ff.png

2.6输入sudo make install

如果需要密码:123456(记住这个密码输入的时候是没有回显的)

18e222fcd102a894c8a01d282a54e32c.png

如果出现正在离开,就表示成功

20da49f34da429a9972252e24de463bb.png

如果发现载sudo make install的时候卡住了不动,只需要敲ctrl+c退出,再按下上键就回车

也就是重新make

这个时候基本上你已经完成了数据库的安装,但是有可能给你安装了多个版本的包

这个时候我们可以测试以下:

在终端上敲 sqlite3 haha.db

看一下进不进入

22f6eb29c0f2d5f105eba6a1bd22da8d.png

如何解决多版本问题:

sudo cp /usr/local/lib/libsqlite3.so.0.8.6 /usr/lib/i386-linux-gnu

sudo cp /usr/local/lib/libsqlite3.so.0 /usr/lib/i386-linux-gnu

再去测试 sqlite3 haha.db 就发现可以了

在当前的虚拟机的终端上输入sqlite3 xxx.db

如果出现以下现象就是已经安装:

62dde8d4f8a374e6ffdd26ae08bb2fff.png

简洁版本:

1.将压缩包拷贝到虚拟机中

2.使用cd xxx进入到你的拥有压缩包的位置文件夹中(使用终端)

3.解压:

tar zxvf sqlite-autoconf-3080301.tar.gz

4.进入到解压好的文件夹中

cd sqlite-autoconf-3080301

5.运行脚本

./configure

6.make

sudo make install

如果让让你输入密码就是123456

7.拷贝解决多版本问题

sudo cp /usr/local/lib/libsqlite3.so.0.8.6 /usr/lib/i386-linux-gnu

sudo cp /usr/local/lib/libsqlite3.so.0 /usr/lib/i386-linux-gnu

文件下载地址:

链接:https://pan.baidu.com/s/1fYJi7crzO1EbVgxQJl7asQ

提取码:xsxp

发布于 2020-04-21

接下来我们开始sqlite3数据库的入门使用及sqlite c编程的学习

在物联网的小项目中我们经常使用到数据库,无论是物联网服务器上的存储还是硬件设备的本地存储。因此本章鑫哥带小伙伴们来搞一搞我们嵌入式+物联网中典型的一个数据库-sqlite3

sqlite3数据库

1.sqlite3的特殊指令(都是以.开头的)

1.1打开数据库

sqlite3 xx.db

使用sqlite3管理系统打开文件名叫做xx的数据库文件

.db表示数据库文件后缀

c61c2f894bfce65fd24b0afa60899fd8.png

1.2退出数据库

.quit或者.exit

ee0c3228a3e0efe314b732baa6977e32.png

1.3查询信息

.database

8a9f765b7c9593dc0f368b3dc3118145.png

1.4查询显示数据库中所有的表

.tables 或者 .table

50c59e9e889970ae39f95941e34ea61b.png

1.5查询显示创建表的结构

.schema xxx xx表示表名称,这个时候就是

查看显示xxx表的结构,如果不写xxx这个时候查的是所有表

表的结构就是你创建表的那句话

1ff0c8e720044344b4e71ad20c538411.png

2.sql语句(sql中的语言)

增删改查:

新建修改删除表

插入修改删除行

查询

2.1新建一张数据表

语法:

create table 表的名称 (列名称 列数据类型, 列名称 数据类型);

例如:

create table persons (id int, name text);

创建一张表 表名为persons 表中两列 分别为id(int类型的)、name(文本类型的)

0a941c9aa896a0b343503b9a1dbdc7c2.png

创建成功就是没有反应的

3.修改表的结构

语法:alter table 表名 rename to 新表名; (修改表的名称)

alter table 表名 add 列名 数据类型; (修改表的结构,添加新的一列)

在sqlite3中没有直接删除一列的sql语句,我们可以先新建一个表,将原表中除了你想删除的那列以外的所有列复制粘贴到新表中,删除旧表,将新表名设置为老表名。

98f3485c8d36dc89e688ebc7a305bd68.png

7678320bb671b30f3a930b1d8045f602.png

4.删除表

语法: drop table 表名 ;

9f934167dee8ba13e302683263347bbd.png

5.插入新的一行数据

语法:

insert into 表名 values (列值1,列值2.....); 全部赋值

insert into 表名 (列名称,列名称) values ( 对应的列值);部分赋值

例如:(切记插入的过程中列值为字符串需要用" ")

5e63967a777312b63fb0904e23e6247b.png

6.修改行中数据

语法:

update 表名 set 列名称 = 列值 匹配条件;

例如: 修改haha表中name那一列设置为文静,当你的id为10的那一行

cc2f7cbd8cb2d9da4d23a06e8b70c9f3.png

7.删除表中一行数据或者匹配到的多行数据

语法:

delete from 表名 where 匹配条件;

例如:删除name为张鑫的那一行

ec9a102a400acc6d66f527ea35c0def7.png

8.查询

语法:

select 列名 from 表名 where 匹配条件;

例如:

select name from haha  where id >10;

查看显示结果集表 只看name这一列 在haha表中 id大于10的

select * from haha;

查看显示结果集表 所有列 在haha表中的所有 条件;

*表示所有列

9.数据库的匹配条件的提高版

例如:我们要进行使用用户名、密码进行登录,如果表中有你这个用户名且对应的密码一样,就可以让你登录

select *from haha where id =lanzhou and passwd = 123456;

如果你有显示,也就是查到东西了,这个时候你就可以登录了

常见的匹配条件:

in、and、or、between and、like模糊查找、not(取其补集)

where的高级用法:

in:

允许在where子句中规定多个值

语法:

where 列名称 in( 列值1,列值2,.....);

select *from haha where id in (1,2,3,4);

and:

多个条件结合起来,且

select *from haha where id =lanzhou and passwd = 123456;

or: 或

select *from haha where id =lanzhou or passwd = 123456;

between and:

between A and B,会选取A到B之间的数据

select *from haha where id between 1   and  3;

like:

模糊查找、像,一般用于地址、姓名

select *from haha where id like 3; select *from haha where addr like "%zhou%";

%zhou%表示你的地址中带有zhou的

%表示通配

例如:姓张的人 "张%"

名字带张就行 "%张%"

not:取补集

select *from haha where id not in (1,2,3,4);

排序:

根据指针的列结果集表进行排序

默认按照升序的进行排序的,可以使用关键字desc(降序)

升序:

select*from haha order by 列名;

降序:

select *from haha order by 列名 desc;

例如:

select *from haha order by id;

如何进行添加新的数据从一个旧的表中

insert into 新表 select 列名 from 旧表;

前提条件:当前的新表中有这个列名称及对应的数据类型

769a95a87ffd39aaa5cb37b02be63ec0.png

小练习:

1.打开一个名为haha的数据库

sqlite3 haha.db

2.新建一张数据表,表名为persons,拥有以下几列

id int , name text,addr text

create table persons (id int, name text, addr text);

3.向表内插入新的一列 sex text

alter table persons add sex text;

4.向表persons插入两行数据

id为10 name为qianfeng

id为12 name为haha addr为beijing

insert into persons (id,name) values (10,"qianfeng"); 
insert into persons(id,name,addr) values(12,"haha","beijing");

5.将persons表名更改为qianfeng

alter table persons rename to qianfeng;

6.将qianfeng表中id为12的行里面的addr设置为shandong

update  qianfeng set addr = "shandong" where id = 12;

7.插入新的一行数据

id为15 name为xixi addr为beijing sex为man

alter table qianfeng add sex text; insert into qianfeng values(15,"xixi","beijing","man");

8.查看显示所有列,在qianfeng表中id大于10的

select * from qianfeng where id >10;

9.修改qianfeng表中,id在10到14之间的行中 addr 为zb

update qianfeng set addr = "zb" where id between 10 and 14;

10.删除qianfneg表中addr中带有字母n的所有行

delete from qianfeng where addr like "%n%";

数据库控制

我们的数据库一般都存放在我们的系统的内存上,以文件的形式

一般情况下对文件进行操作,主要有打开、读、写、关闭

我们对数据库的操作也是打开、读、写、关闭,只不过我们使用的是数据库库函数

1.对数据库打开操作:

SQLITE_API int sqlite3_open(

const char filename, / Database filename (UTF-8) */

sqlite3 ppDb / OUT: SQLite db handle /

);

参数 :

你要打开的文件名,文件名是一个字符串,需要" "

数据库句柄的地址(指针)

以上函数表示的就是打开这个数据库文件,放入到句柄的中

因为你传递的参数是句柄的地址,因此我可以改变句柄的内容

返回值:

如果当前的函数成功运行,就会返回一个SQLITE_OK

编写代码之前我们需要进行一些准备工作:

1.需要保证当前的文件夹内有一个sqlite3.c 和sqlite3.h这两个文件

a8129133eb08b61aab54d909d120ffdb.png

这个时候你就可以敲代码了

//1.包含头文件

2.对数据库关闭操作

SQLITE_API int sqlite3_close(sqlite3*);

参数:

数据库句柄db

返回值:

如果当前的函数成功运行,就会返回一个SQLITE_OK

编写代码:

//1.包含头文件

aa1a63e1122f47030c115248156cc9f8.png

3.对数据库写操作

SQLITE_API int sqlite3_exec(

sqlite3, / An open database */

const char sql, / SQL to be evaluated */

int (callback)(void,int,char,char), / Callback function /

void , / 1st argument to callback */

char errmsg / Error msg written here /

);

参数:

打开的数据库句柄

sql语句字符串

同时调用的函数名称 一般写NULL

传递给函数的参数 一般写NULL

错误信息的存储位置

返回值:

如果当前的函数成功运行,就会返回一个SQLITE_OK

代码编写:

#include 

4.对数据库读操作

SQLITE_API int sqlite3_get_table(

sqlite3 db, / An open database */

const char zSql, / SQL to be evaluated */

char *pazResult, / Results of the query /

int pnRow, / Number of result rows written here */

int pnColumn, / Number of result columns written here */

char pzErrmsg / Error msg written here /

);

参数:

你打开的数据库句柄 --------也就是你要对哪个数据库进行读操作;

你要进行读操作的SQL语句(查)

查询到的结果集表的地址

你查到的结果集表的行数(查询到的数据行数)

你查到的结果集表的列数(查询到的数据列数)

错误信息

返回值:

如果当前的函数成功运行,就会返回一个SQLITE_OK

#include 

使用实例:

1.需求流程

首先让你输入一个表名

按照你的表名去创建一个新的表,id int ,name text 两列

让你输入id和name

然后插入到你这个刚刚建立的表中

然后查询你刚刚输入的id对应的名字

2.心理变化

我不管干嘛,只要对数据库操作就先打开数据库

获取键盘输入的表名

组一个创建表的sql语句(这个语句是一个写操作)

使用写的操作去向数据库发送--sqlite3_exec

因为后面还用数据库因此不关数据库

获取键盘输入的id和name

组一个插入新的一行的sql语句(这个语句是一个写操作)

使用写的操作去向数据库发送--sqlite3_exec

因为后面还用数据库因此不关数据库

组一个查询的sql语句查name匹配id(这个语句是一个读操作)

使用读的操作去向数据库发送--sqlite3_get_table

打印读取到的内容

关闭数据库

代码:

#include <stdio.h> 
#include "sqlite3.h" 
int main(int argc, char const *argv[]) 
{   
sqlite3*db;     int ret = sqlite3_open("xixi.db",&db);  if (ret !=SQLITE_OK)    {       perror("SQLITE_OKn");      return 0;   }   char table_name[50] = "";   printf("请输入你要创建的表n");  scanf("%s",table_name);     // 2.写一个创建表的sql语句.  //再去定义一个数组用来保存我重新组的新字符串     char cmd[100] = "";     sprintf(cmd,"create table %s (id int ,name text);",table_name);//完成了一个组包的操作     // 3.看自己是读操作还是写操作   //  如果是写操作就使用sqlite3_exec   //  如果是读操作就使用sqlite3_get_table  // 4.调用就行了  char *errmsg = NULL;    sqlite3_exec(db,cmd,NULL,NULL,&errmsg);     if (errmsg != NULL)//如果我们出现错误就会打印errmsg     {       printf("%sn", errmsg);     }   int id = 0;     char name[50] = "";     printf("请输入你的idn");    scanf("%d",&id);    printf("请输入你的namen");  scanf("%s",name);   char cmd2[100] = "";    sprintf(cmd2,"insert into %s values(%d,'%s');",table_name,id,name);//   '就相当于引号  sqlite3_exec(db,cmd2,NULL,NULL,&errmsg);    if (errmsg != NULL)//如果我们出现错误就会打印errmsg     {       printf("%sn", errmsg);     }   char cmd3[100] = "";    sprintf(cmd3,"select name from %s where id = %d;",table_name,id);   char  **table = NULL;//用来存放你数据库查到的结果    int r,c;//r行数 c列数   sqlite3_get_table(db, cmd3,&table,&r,&c,&errmsg);   if (errmsg != NULL)//如果我们出现错误就会打印errmsg     {       printf("%sn", errmsg);     }   printf("%sn", table[1]);   //由于你只有1列,最上方的列名是table[0],因此你的name就是tabel[1]    char cmd4[100] = "";    sprintf(cmd4,"select * from %s; ",table_name);  sqlite3_get_table(db, cmd4,&table,&r,&c,&errmsg);   if (errmsg != NULL)//如果我们出现错误就会打印errmsg     {       printf("%sn", errmsg);     }   int i,k;    for (i = 0; i < r+1; ++i)//r+1是因为多出来一个列名一行  {       for (k = 0; k < c; ++k)         {           printf("%s", table[i*c+k]);         }       printf("n");   }   printf("n");       sqlite3_close(db);  return 0; }

你查询得到的是一张表,有行有列的

720544788dba08abad82f0f5fa603a15.png

如何进行数据库代码的编写:

1.看自己需要进行什么操作;

收集一下自己需要到的变量(数据)

2.组一个操作的字符串(sql语句)

3.打开数据库

4.思考我们当前的数据库操作是读还是写(增删改都是写操作,读就是查操作)

5.对应的调用一下函数将自己的sql语句发给数据库

6.看一下自己还要进行什么操作

7.关闭数据库

如何组包:

1.收集好自己要往包中组的数据

c845286ed672df1adbad32772d90b82c.png

2.开始组包

7373cdff66a453ad3b1c9c8b0b871b2d.png

为什么要传递&取地址:

传递取地址都是指针传递(参数的传递):可以更改其内容

8f30b8467bec107b0f5cbe73afc1ef7f.png

我们使用代码验证一下:

7996cc13cff60a3a324199a5763d7d72.png

6365f94bec7135e4dfeb5b4e84ab4c81.png

如何排错:

1.看函数的返回值,如果函数的返回值是SQLITE_OK就说明当前函数运行的没有问题

如果有问题,打印一下错误信息 perror("sqlite3_openn");

2.如果你的返回值是SQLITE_OK,如果还是有问题,这个时候我就去看errmsg

也就是,如果你的sql语句出问题,你出了什么问题就会在errmsg中进行存储

printf("%sn",errmsg);

以上就完成了对sqlite3环境安装、sqlite3数据库指令、SQL语句、sqlite c编程的学习,欢迎小伙伴留言交流谢谢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值