【域套接字】

AF_UNIX / AF_LOCAL
用于本地进程之间的通信
通信基于套接字文件

编程流程

server:

  1. **1.**socket(AF_UNIX,SOCK_STREAM,0);<br /> unlink(); //删除目标最后一个链接文件,若链接文件不存在,则删除文件<br /> **2.**bind() //绑定协议族和本地通信的套接字文件<br /> struct sockaddr_un<br /> {<br /> sun_family; //AF_UNIX<br /> sun_path[108]; //套接字路径名<br /> };<br />注意:套接字一定要保证不存在<br /> **3.**listen()<br /> **4.**accept()<br /> **5.**recv/send()<br /> **6.**close()

client:

  1. **1.**socket();<br /> **2.**指定套接字文件路径和协议族<br /> **3.**connect()<br /> **4.**recv/send;<br /> **5.**close()

【数据库】

定义:

在数据库管理系统的管理下,存在在存储媒介上的数据的集合

数据库管理系统:

对数据库数据进行统一管理和控制的软件系统

sqlite3数据库:

1.零配置,无需配置和安装管理
2.存储在单一磁盘上的完整数据库
3.数据库把文件可以在不同字节顺序的机器上实现共享
4.支持数据库大小可以到2TB
5.足够小,250kb
6.比市面上大多数数据库对数据的操作都快

sqlite是轻量级数据库

打开一个数据库文件:

  1. sqlite3 名字.db

【sqlite3操作命令】

系统命令

系统命令以.为前缀

.help:查询帮助文档
.quit:退出数据库进程
.open 数据库名:打开数据,没有就不打开
.table:查看当前数据库中有哪些表
.schema:查看表格结构

数据库操作命令

数据库操作命令以’;’结尾

1.创建表:

  1. create table 表名 (成员 成员类型,成员 成员类型,...);<br />注意:数据库不支持严格类型检查<br />**补充:**创建表格时,当表格存在,我们可以在语句里+if not exists判断<br />“create table if not exists 表名() ;”

2.插入一条数据:

  1. insert into 表名 values(成员,...);

3.查询:

  1. select * from 表名; 查询表中所有数据

按照指定条件查询:
  1. select * from 表明 where 成员=具体数据; <br /> select * from 表明 where 成员=具体数据 and 成员=具体数据;<br /> select * from 表明 where 成员=具体数据 or 成员=具体数据;

查询指定几项数据:
  1. select 成员,成员 from 表名 条件;

查询前n条数据:
  1. select * from 表名 limit n

3.删除表中数据:

删除表中所有数据
  1. delete from 表名;

按照条件删除数据
  1. delete from 表名 where 条件;

4.删除表

  1. drop table 表名;

5.增加一列

  1. alter table 表名 add column 成员 成员类型;

6.修改表名

  1. alter table 原表名 rename to 目标表名;

7.删除一列

  1. 没有直接删除一列的命令<br /> **步骤:**<br /> **a. **复制原来表中信息到一张新表<br /> create table stu2 as select id,name,age,score form stu1;<br /> **b.**删除stu1<br /> **c.**给stu2改名为stu1

8.更新表中数据

  1. update 表名 set 成员=具体数据;<br /> **按照条件更新**<br /> update 表名 set 成员=具体数据 where 条件;

【sqlite3编程接口】

编译时要加-lsqlite3

1.sqlite3_open()

int sqlite3_open(const char path, sqlite3 *db);

功能:

打开一个数据库

参数:

  1. **path:**要打开的文件路径<br /> **db:**句柄

返回值:

成功:返回0
否则就是失败

2.sqlite3_close()

int sqlite3_close(sqlite3 *db);

功能:

关闭数据库

参数:

db:句柄

返回值:

成功:返回0
失败:返回错误码

3.sqlite3_errmsg()

char sqlite3_errmsg(sqlite3 db)

功能:

错误信息返回函数

参数:

句柄

返回值:

返回出错信息

3.sqlite3_exec()

int sqlite3_exec(sqlite3 db, const char sql,int (callback)(void,int,char,char), void arg,char *errmsg);

功能:

数据库操作函数

参数:

  1. **db:**句柄<br /> **sql:**数据库语句<br /> **callback:**回调函数<br /> **arg:**传给回调函数的参数<br /> **errmsg:**错误信息

返回值:

成功:返回0
失败:返回错误码

注意:

sqlite3_exec的第3,4个参数只有使用select数据库语句时
才被使用,正常情况下填NULL

回调函数:

int callback (void para,int f_num,char*f_value,char f_name){}

功能:

每找到一条记录(一行)就执行一次回调函数

参数:

  1. **para:**是sqlite3_exec的第4个参数传递过来的<br /> **f_num:**每一行的数据项个数<br /> **f_value:**每一个数据项具体的数据<br /> **f_name:**每一个数据项的名字

char == char[]
char*
//字符串数组

4.sqlite3_get_table()

int sqlite3_get_table(sqlite3 db,char sql,char resultp,int nrow,int *ncolumn,char errmsg)

功能:

不带回调函数的操作函数

参数:

db:句柄
sql:数据库语句
resultp:指向字符指针数组的指针
nrow:指向存放行数的指针
ncolumn:指向存放列数的指针
errmsg:错误信息指针

返回值:

成功:返回0
失败:返回错误码