当前位置: 首页 > news >正文

关于linux软件编程15——数据库编程sqlite3

C 数组 
链表    内存 程序已结束 数据消失 
---------------------------------
文件    硬盘 永久存储设备 
数据库  :数据的仓库 

一电子化的文件柜 :
数据库是“按照数据结构来组织、存储和管理数据的仓库”。
是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
二、关系型数据库:

关系模型数据的逻辑结构是一张二维表
*每一行是一个一个对象成员
*每一列是对象的一个属性
特点:    
1、每一列中的分量是类型相同的数据。 
2、列的顺序可以是任意的。
3、行的顺序可以是任意的。
4、表中的分量是不可再分割的最小数据项,即: 表中不允许有子表。  

关系数据库采用关系模型作为数据的组织方式
关系数据库因其严格的数学理论、使用简单灵活、数据独立性强等特点,而被公认为最有前途的一种数据库管理系统。

它目前已成为占据主导地位的数据库管理系统自 20 世纪 80 年代以来,作为商品推出的数据库管理系统几乎都是关系型的,例如:Oracle、Sybase 等。

三、常用数据库:

常用的数据库
常用的数据库有:
ORACLE、Mysql、SQL server、Access、 Sybase、SQLite 
1、ORACLE: //大型 
ORACLE 是甲骨文公司开发的一款数据库,
是一种适用于大型、中型和微型计算机的关系数据库管理系统,
它使用 SQL 语言作为它的数据库语言。

2、MySQL: //中小型 
MySQL 是一个开放源码的小型关系型数据库管理系统,
开发者为瑞典 MySQL AB 公司,92HeZu 网免费赠送 MySQL。
目前 MySQL 被广泛地应用在 Internet 上的中小型网站.
提供由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,
许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。

3、SQL server: //微软的中型
真正的客户机/服务器体系结构。 微软 Microsoft 出品的一款数据库软件图形化用户界面,使系统管理和数据库管理更加直观/简单
具有很好的伸缩性,可跨越从运行 Windows 95/98 型电脑到运行 Windows 2000 的大型多处理器等多种平台使用。

4、Access:
Access 是由微软发布的关系数据库管理系统。
它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一
Access 是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的, 效率也很高. 但是它的同时访问客户端不能多于 4 个。
access 数据库有一定的极限,如果数据达到 100M 左右,很容易造成服务器 iis 假死,或者消耗掉服务器的内存导致服务器崩溃。

5、Sybase:
sybase 公司 1987 年推出了 Sybase 数据库产品
Sybase 主要有三种版本,
一是 UNIX 操作系统下运行的版本,
二是 Novell Netware 环境下运行的版本, 
三是 Windows NT 环境下运行的版本。

Windows NT:

Microsoft Windows NT(New Technology)是 Microsoft 在 1993 年推出的面向工作站、网络服务器和大型计算机的网络操作系统,也可做 PC 操作系统
Sybase 数据库特点:
1:基于客户/服务器体系结构的数据库。
2:它是真正开放的数据库 ,容易移植。
3:它是一种高性能的数据库。

四、sqlite3数据库介绍:

//学生的信息 
struct stu 
{
int sno;
char name[20];
int age;
};

110   xiaoMing 20 

database
DBMS:    data base management system (数据库管理系统)

甲骨文 -- oracle 认证 

数据库
sun / java 
solaris  gnu
1、分类: 大型    中型    小型
ORACLE   MYSQL/MSSQL   SQLITE  DBII powdb
关系型数据库  : 数据存储典型的就是 表  //sqlite3     
非关系型数据库: 类似json数据 键值对    //芒果db 
2、名词:
DB        数据库 select update database
DBMS    数据库管理系统
MIS     管理信息系统
OA      办公自动化
3、嵌入式数据库:
sqlite3    www.sqlite.org  www.kernal.org

GNU   
特点:
1、开源  C语言开发
2、代码量少 1万行左右,总大小10M以内
3、绿色软件无需安装
4、文件型数据库,可以移动。
5、数据容量最大 2T        

 1sqlite的介绍

A.sqlite的源代码是C,其源代码完全开放。sqlite第一个Alpha版本诞生于2000年5月。
他是一个轻量级的嵌入式数据库。
B.sqlite有一下特性

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

          
2学习参考:
http://www.runoob.com/sqlite/sqlite-update.html

3安装:

whereis sqlite3
//安装 sqlite3 
4、sqlite3的安装: LTS long term support 
1、在线安装 :
//ubuntu能上网 
sudo apt-get install sqlite3 
sudo apt-get install libsqlite3-dev

gcc test.c -lsqlite3 -lpthread

2、验证是否安装成功:
sqlite3 --version
sqlite3 --help

    3.源码安装:
a. ./configure   ---配置 编译 规则(makefile)
b. make   //编译出 安装程序 
c. make install 


4[简单使用:]
1.数据库

   sqlite3 小型嵌入式数据2.操作:[1] $sqlite3 <数据库文件名>//如果数据库文件不存在,则创建//存在则直接打开[2].获得帮助信息sqlite3> .help    //注: sqlite3 命令都是以 “.”开头sqlite3常用命令://进入到sqlite3软件中之后,.help ---查看 sqlite3的支持的相关命令 .quit ---退出sqlite3 软件 .databases --- 查看当前关联的数据库文件 是哪个?



2增删改查 

sqlite3 --- 关系型数据库 
表格的结构
姓名   性别   年龄    电话 
xxx     x     xxx     xxx  xxx  //一条记录 

非关系型数据库:
key=value; //键值对 
name="xiaoMing"  //json的数据 


3SQL语言 (Structure Qurey Language)
//结构化查询语言 -- 用在数据库的操作 
  增删改查

  增:创建表sqlite3>create table <表名> (字段1 数据类型,字段2,.....); eg: create table stu (sno,sname ,age);create table user (name,sex,age,tel);命令: sqlite3> .tables  //查看数据库中表有哪些sqlite3> .schema   //查看表的结构sqlite3:相关命令.tables  //查看已经创建的表 .schema  //查看表的结构 --create语句 //插入数据 sql: //sql语句(structure qurey language) 需要以分号作为结束表示insert into <表名> values (110,'XiaoMing',18); //查询信息  sql:select 列名  from 表名;select * from stu;命令:sqlite3> .headers on  //开启表头的显示sqlite3> .mode column //开启列模式(左对齐的方式显示)//按条件查询sql:select * from where <条件>;eg://查看学生表中,年龄大于18岁人的信息select * from where age > 18;//查看学生表中,年龄大于18岁小于25岁的人的信息select * from where age > 18 and age < 25;SELECT column1, column2, columnN FROM table_name WHERE [condition]SELECT *  FROM table_name WHERE [condition] //数值数据 //字符串形式 //删除命令sql:delete  from <表名> where <条件>; eg://删除学生表中的年龄等于18岁的人的信息delete from stu where age = 18;

4exe:
    创建学生信息表,
添加信息
查询信息
删除信息

熟悉相关sqlite3 操作命令
.help
.quit
.headers on
.mode column
.tables
.schema
.databases

sql:
create
insert 
select
 

增加:
创建表    --create table 
添加信息  --insert into 
删除:
删除一条信息--delete from 
drop 
修改:
修改字段信息 update 
添加字段     alter 
查询:
select  
5、sqlite3的使用:
            0、启动sqlite3

sqlite3 xxx.db  ===>用sqlite3 来打开一个名称为test.db的本地数据库。出现如下提示符:表明数据库管理系统启动。sqlite> 退出数据库: .q 命令注意:如果一直出现如下符号:...>   则写';'结束。以下所有命令必须在 sqlite> 后执行。创建一个数据库:1、touch  xxx.db2、sqlite3 xxx.db

    1、系统维护命令:===> .help

  出现所有相关的系统维护命令,都是以 "."开头。.database  列出当前库和系统中那个文件在关联.tables    列出当期数据库中的所有表.schema xxx 列出当前指定的xxx表结构.dump user   ===>导出数据库重定向sqlite3 test.db .dump > 123.sqlsqlite3 xxx.db < test.sql ===>导入数据库

    2、标准SQL语句:===》通用语法在其他平台可以直接使用。struct query language;
注意:所有的sql语句都以';'结尾。

  //创建一个表:ddl//sql语法:create table  表名 (表字段1 数据类型,表字段2 数据类型 ,...);eg: create table user(id,name,age);         char 注意:以上表的表字段,支持如下数据类型。int text ---文本 (字符串数据) real ---浮点型 blob ---二进制 (图片)默认是text类型。char;create table 表名 (表字段 类型,表字段 类型,...);eg:create table user (id int  ,name char,age int);//删除一个表://sql语法:drop table  表名;eg:drop table user;数据库常规操作: 增加 删除 修改 查询//插入数据时,某些字段,不给值 NULL --- sql 语句--- 空 c语言中区分 --- NULL(空指针) //define NULL (void *)0 //向表中增加数据://sql语法:insert into 表名 (字段名称 ) values (值名称);eg:insert into user (id,age) values (1,10);insert into user values(3,"wang",11);insert into user (age) values ( 12);//插入数据写法://全部插入 insert into 表名 values(所有字段对应值); //如果某些字段,不想给值,可以写成NULL(空值)//部分插入 insert into 表名(指定字段) values(指定字段对应值);//查询表中的数据://sql语法:select 列名 from 表名  条件;eg://方式1:  查询所有信息 select * from user ;  //打印表中所有信息 //方式2: 查询指定字段的信息select id from user;select id,name from user where not  age <30//方式3: 查询指定条件的信息 //where条件 (子句)where name   like '三一'   % _ascselect *from user where age>20 or age<50 order by age desc limit 2 ;//&&  ||   c语言的写法 例子:登录一个网站的时候 用户名 密码select * from user where name=用户名 and passwd=密码; 用户名:tom 
密  码:123456 
用户名 和 密码 查询了一下                  
select * from user where name=用户名 and passwd=密码;  

        

练习:
用学生这个表,进行条件查询!           

//修改表中数据:
//更新
update 表名 set 表字段 = 值  满足条件:
eg: 
update user set id = 1 where name = 'li';
update user set id = 1 where name = "li" and passwd = "123";
update user set id = 2 where name = "li" or  name = "zhao";

     
删除表中数据:
delete from 表名  满足条件:
eg:delete from user ;  ///删除表中所有数据
delete from user where id  = 1; ///删除id=1 的数据;
delete from user where id =1 and name = "zhang";
delete from user where id = 1 or id  = 2;

>2018-1-1 and <2018-12-31

增 ---creat / insert 
删 ---drop  / delete 
改 ---alter / update
查 ---.table(.schema)/select     


练习:
新建一个mydb.db数据库,并在库中新建一个student表
至少不能少3个字段,依次录入5条记录删除其中第一条和
倒数第二条记录


6、补充:

6.1插入时间列

unicodeCREATE TABLE user1(id int,name char,age int,dt datetime);
eg:insert into user1 values (2,'张三',23,datetime('now','+8 hours')); //utc

6.自动增长列 

create table user5 (id INTEGER PRIMARY KEY ASC,name char, age int);  
//int 需要写成 INTEGER 才能实现自动增长 
create table user4 (id int   PRIMARY KEY ASC,name char, age int);

    sqlite> CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime);sqlite> insert into user3 (NULL,'李四',23,datetime('now'));


6.3主键: 编号作为主键 

asc  -- 升序 
desc -- 降序

    where (group by having) order by [desc] limit;select * from user where id<10 order by id limit 2;  


6.4其他

[维护命令]:
1、数据的导出:
sqlite3 xxx.db .dump > xxx.sql
//将数据库名称为xxx的数据库整体导出到脚本中。

2、数据的导入:
sqlite3 xxx.db < xxx.sql

3、可视化工具安装:
sudo apt-get install sqliteman 

NavicatSqlite3  --- windows下 //图形化的操作工具 

   
7编程层面 进行操作?

 APIs (application program interface) --- 编程接口 --函数 
==================================================
sqlite3 数据库编程接口:

1、需要的头文件
sqlite3.h

2、编译过程
-lsqlite3

3、编程框架:
打开数据库 ==》读写数据库(增,删,改,查) ==》关闭数据库

sqlite3.h

类比:
FILE *fp = fopen------->hello.c 
编程:
fp 代表就是hello.c 
sqlite3 ** db qlite3_open ------------>user.db     
3.1 打开数据库: sqlite3_open      

 int sqlite3_open(const char *filename,   /* in: Database filename (UTF-8) */sqlite3 **ppDb          /* OUT: SQLite db handle */ //句柄 );sqlite3 * db;int sqlite3_open(char * path,sqlite3 ** db);功能:打开指定path路径+文件名称的数据库,并将打开的地址指向db变量的句柄。参数:path 要打开的数据库路径+名称db   要打开的数据库地址指针返回值:成功  0失败  -1;sqlite3* * db  //某个指针变量的地址注意:数据库文件 不存在时,此时 sqlite3_open 会创建该数据库文件 如果数据库文件存在,此时,sqlite3_open 默认打开该文件 sudo apt-get install libsqlite3-dev //解决头文件包含出错的问题

3.2 关闭数据库: sqlite3_close

 int sqlite3_close(sqlite3 *db);功能:关闭指定的数据库参数:要关闭的数据库地址返回值:成功  0失败  -1;//增 删 改 查 
//sql 语句 ---执行sql语句,从而影响到数据文件的内容 


3.3 数据库操作:

   查询操作:sqlite3_get_table();  ////select int sqlite3_get_table(sqlite3 *db,char *sql,char *** rest, //&p ---> char ** * int *nrow,int *ncol,char ** errmsg);char *a[10] = {};a ---> char **      char **p = a; char *array[] = {"hello","world"};arrary => char **char **p = arrary; sqlite3_get_table(sqlite3 *db,char *sql,&p, //&p ---> char ** * int *nrow,int *ncol,char ** errmsg);功能:在db数据库上执行sql查询语句,并将执行的结果集返回到rest地址上,同时返回查询的行和列。参数:db 要执行查询语句的数据库sql  要执行的select查询语句rest 查询的结果集是一个三级指针//用来保存 结果的字符串 指针数组的首地址 nrow 查询的结果的行数  //保存结果的行数 ncol 查询的结果的列数  //保存结果的列数 errmsg 如果执行有错误,则存储错误。返回值:成功 0失败 非0;执行sql语句:sqlite3_exec();   ////insert delete updatechar *errmsg;int sqlite3_exec(sqlite3 *db,char *sql,callback fun,  //回调函数 -- select void * arg,    //回调函数 第一个参数 char ** errmsg);功能:在db数据库上执行sql 非查询语句。并将结果返回。参数:db 要执行sql的数据库sql  要执行的非查询sql语句。fun  如果该函数要执行查询语句,则该回调函数用来回收查询的结果。arg  回调函数的参数,如果没有回调函数则该参数为NULL;errmsg  执行过程中的错误信息。返回值:执行成功  0失败  非0 ;int fun(void *arg ,int f_num,char ** f_value,char ** f_name)功能:该函数用于sqlite3_exec执行select语句的结果集返回数据。参数:arg     由sqlite3_exec传入的参数f_num   执行该命令所返回测结果集的字段个数。f_value 查询结果集中的字段的值。f_name  查询结果集中的字段的名称。返回值:成功 0失败 非0注意:该回调函数必须有返回值,否则可能导致查询异常。char *value[] = {"1","A","14","2","B","15",NULL};char *name [] = {"id","name","age",NULL};[name ]->{"id","name","age",NULL}[info1]->{"1","A","14"}[info2]->{"2","B","15"}[info3]-> NULLsqlite3_errmsg() //出错信息

练习:1创建一个学生表,最少不能低于3个字段
最好有一个唯一主键,
设计程序以代码方式,依次输入5个学生信息
并存储到数据库中,最终查询显示所有学习信息。

      id(主键,自动),name,age,addr,datetime,recommand;

至少插入5条记录。

修改3处。

删除2条记录。

信息系统:
请输入学生信息:
name : 
sno : 
score: 

    
练习:给数据库表添加主键:
1、sqliteman 设计表过程中选择 ;PK INTER
2、SQL 语句:
create table user(id int primary key,name text);

新建表
create table stu_info(id int ,name char ,age int ,phone char ,email char,qq char);
增加记录
insert into stu_info values (2,'关二哥',55,'13011112222','gauanerge@163.com','8888888');
查询记录
select * from stu_info;
修改记录
update stu_info set age = 56
where id = 2;
删除
delete from stu_info where id = 2;

select*from 表明  where
从句where 

(id int,name char,age int,kind int,salary real);


insert into person values(9,'周瑜',39,3,3638.20);


sqlite3 操作的基本思路:
sqlite3_open 
sqlite3_errmsg(db)
sqlite3_close(db);
sqlite3_exec
sqlite3_free(*) //sqlite3_malloc 
sqlite3_get_table //sqlite3_free_table 配套


sqlite3_exec  //在select时 需要回调来打印结果 
sqlite3_get_table //在select时,不需要回调 
sqlite3_free_table //注意,sqlite3_get_table 如果select有查询结果 
//需要,使用sqlite3_free_table 来释放 堆区空间  

练习:查字典 
book  --- 通过查数据库 输出解释 
自动增长列 word explain 时间 

sqlite3_open 
sqlite3_exec / sqlite3_get_table 

http://www.xdnf.cn/news/1446247.html

相关文章:

  • wpf之Border
  • 小程序 NFC 技术IsoDep协议
  • iBeLink BM S1 Max 12T矿机评测:Sia算法、高效算力与优化设计解析
  • AI 重塑就业市场:哪些职业会被替代?又有哪些新岗位正在崛起?
  • 文件处理三大利器之三:awk
  • 3大主流语言web框架写hello world
  • 接口测试之Mock测试方法详解
  • 使用spring-boot-starter-validation常用注释优雅判断类型
  • 小迪安全v2023学习笔记(七十六讲)—— Fuzz模糊测试口令爆破目录爆破参数爆破Payload爆破
  • uniapp 开发上架 iOS App全流程
  • uni-app iOS 文件管理与 itools 配合实战,多工具协作的完整流程
  • 如何选择适合企业的海外智能客服系统:6 大核心维度 + 实战选型指南
  • 集成运算放大器的作用、选型和测量指南-超简单解读
  • 4 款音分轨工具推荐:制片帮领衔,轻松搞定音频分离
  • 实现信号的小波分解和重构
  • 7.5el-tree 组件详解
  • 创建消息队列,完成信息传输
  • MySQL索引分类
  • 英语四级学习指南
  • A*(Astar)算法详解与应用
  • 电池分选机的自动化解决方案|深圳比斯特
  • SQLAlchemy ORM 入门教程
  • 马斯克砸钱造AI,却败给最low的“让离职员工轻松拷走代码”
  • MyHeyGen-开源版HeyGen,视频翻译工具
  • 平衡车 - 电机调速
  • HI3516CV610-00S 海思HI3516CV610安防高清视频编解码方案提供开发板
  • Nature Machine Intelligence 基于强化学习的磁性微型机器人自主三维位置控制
  • 物联网能源管控平台建设方案
  • 概率质量/密度函数、累计分布函数详解
  • github存储代码(上传更新删除)--实操版