您的位置:首页 > 其它

2017年1月18日 课堂笔记

2017-01-19 18:57 387 查看
1. 无缓冲文件:(系统调用)直接从内核获取
有缓冲文件:(库函数)用户空间和内核空间 生成了缓冲区,把内核数据写入缓冲区,调用函数从缓冲区获取,以此来减少对内核的访问

2.库函数与系统调用的区别:
①库多次读写效率高,一次读写系统调用高
②库函数,不稳定,由第三方提供,可能有小bug
③访问特殊文件,如网络文件,设备文件,少数调用时,使用系统调用,普通文件一般用库函数
④依赖的对象不同,系统调用依赖操作系统
⑤库函数有缓冲,而系统调用无缓冲

3.文件存储的缺点:无格式存储
数据库:一个特殊的文件(数据库文件)
(DATA BASE简称DB)就是一个有结构的,集成的,可共享的统一管理的数据集合,不仅包括数据本身,而且包括相关数据之间的联系。
数据库计数主要研究如何存储,使用和管理数据;

DBMS:数据库管理系统软件,所以访问数据库的请求都由DBMS来完成,DBMS提供了操作数据库的许多命令(语言),即SQL语言
通过软件对数据库做操作(读写等)

LINUX下通过 touch test.db 来创建数据库文件

4.不同的管理软件,管理方式不同
主流的模型:(1)关系型数据库模型,用关系来表示实体类型以及实体间联系的模型成为关系型模型(如登记表)
(2)层次结构模型
(3)网状结构模型

5.数据库系统结构:
(1)本地小型数据库
(2)主从式数据库
(3)分布式数据库
(4)客户/服务器结构

6.大型数据库:SQL,Oracle,DB2,Access

7.基本类型:
关系:一张二维表
元组:行
属性(字段):列
主键:某一列可以唯一标识一行

8.嵌入式数据库的要求:
①体积适当 ②可移植性 ③编程接口简单 ④代码开源

sqlite3 text.db 进入, .exit 退出

9.SQL:
功能:(1)数据定义(DDL):用户定义、删除和修改数据模式
(2)数据查询(DQL):用户查询数据
(3)数据操作(DML):用于增、删、改数据
(4)数据控制(DCL):用于控制数据访问权限

命令:每个命令以‘;’结束,且不区分大小写
数据类型:① integer 整型 ②text 字符串(或者char 16, char 32) ③bool 布尔类型 ④real 实数型

10.创建数据库:
①touch st.db 创建数据库文件
②sqlite3 st.db 用sqlite3打开
③ create table student(id integer primary key, name text, age integer);
创建 表 表名 第一列名字为id,是主键
④.schema 可以看见当前数据库下的所以表,以及表的字段
⑤drop table student 删除表
⑥alter table student rename to student1;
改变 表 重命名
alter table student add column sex text; 增加一列
⑦insert into student(id,name,age,sex) values(1,'zhang',12,'f'); 增加一行
⑧select *from student; 查看表的所有信息
⑨更新:updata student set age = age + 1; 所有age+1
updata student set name = 'li' , sex = 'x' where name = 'zhang' and age = 8; 更新数据
⑩删除数据:delete from student where name = 'zhang'; 把‘zhang’这一行数据删除

11.常用api:
(1) int sqlite3_open(const char *filename,sqlite3 **db);
头文件:#include <sqlite3.h>
作用:打开数据库,没有就自动创建
成功返回宏:SQLITE_OK

编译时要链接sqlite3的库

(2)int sqlite3_close(sqlite3 *db);

(3)int sqlite3_exec(sqlite3 *db, const char *sql , sqlite_call back callback, void *para, char **errmsg);
执行的SQL语句 查询结果传给回调函数 传给回调函数的指针 最后一个为错误信息(一般写 &errmsg, errmsg为char *类型)
一般,不用查询功能时,参数3和4为NULL
回调函数:
int handle_result(void *para, int column_count, char **column_value, char **column_name);
传递的指针 列的总数 列的值(column_value[i]) 列的名字
返回值不是0就是非零,两种;
写return 0;会遍历整个表,当没有数据的时候,返回0;

补充:
sprintf(char *, "格式输入",...具体的值); 可以这样封装字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: