数 据 库
1、常用名词
DB 数据库
DBMS 数据库管理系统
MIS 管理信息系统
OA 办公自动化
2、常用的数据库管理系统
2.1 大型
oracle 甲骨文
DB2
2.2 中型
mysql
ms sql server
2.3 小型
sqlite3
access
3、嵌入式领域使用最多的数据库管理系统: sqlite3
特点: 1、源代码开放 ,C语言开发。
2、代码量3行左右,总大小6M
3、绿色软件无需安装直接使用
4、文件型数据库总容量达到 2T
5、操作速度快
4、sqlite3的安装和使用
1、下载或者拷贝源代码文件到本地路径
2、解压缩: tar -zxvf sqlite-autoconf-3081002.tar.gz
3、切换目录; cd sqlite-autoconf-3081002
4、./configure
5、make
6、make install
验证是否安装成功:
# sqlite3
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
sqlite>
要退出当前环境: .q 回车
如果一直出现 ....> 则按 ';' 结束
5、数据库管理系统 sqlite3的使用。
5.1 系统维护命令 .help ===>显示当前系统支持的所有命令
当前系统的维护命令都是以 '.'开头,sqlite3 专用命令
.q 表示退出当前系统
.database 列出当前系统中已经存在的数据库
.tables 列出当前系统中数据库中的表。
.schema xxx 列出当前表xxx的结构信息
创建数据库:
1、touch xxx.db
2、sqlite3 xxx.db
5.2 SQL 语法 通用语法,所有的关系数据库都支持。
当前系统中所有的sql语句都是以';'结尾。
sql语句必须在数据库管理系统环境中执行。
1、创建表
create table 表名 (字段) ;
eg:create table test(id,name,age) ;
注意:表名称一般类似C语言命名规范。
字段,默认是字符串类型,
可以有 int text real blob
eg: create table test2(id int ,name text,score real,pic blob);
可以指定某一列为主键:
create table test3( id INT PRIMARY KEY,name text);
2、删除表
drop table 表名;
eg: drop table test;
3、表中数据的操作:增加 删除 改变 查询
3.1 增加:
insert into 表名 values (value1,value2....);
eg:insert into test values (1,"zhang",10);
insert into 表名(列名..) values (值...);
eg:insert into test (id,name) values (2,"zhao");
3.2 查询:
select 列名 from 表名 where 条件:
1、select * from test;
查询test表中所有数据记录。
2、select id from test;
查询test表中id列的所有记录。
3、select * from test where id = 1;
查询test表中id =1 的记录。
3.3 删除数据
delete from 表名 where 条件;
eg:delete from test where id = 1;
删除id =1 的记录
delete from test;
清空整个test表
3.4 修改数据
update 表名 set 列 = 值 where 条件;
eg:update test set name = 'zhao' where id =1;
练习:新建一个 mydb.db 数据库,并在库中新建一个student表
表字段不能少3个,依次插入5条记录。
2、可视化的管理工具: sqladmin
3、脚本操作:===》xxx.sql
3.1 数据的导出
sqlite3 xxx.db .dump > xxx.sql
含义:将xxx.db 的数据库信息导出到指定的 xxx.sql脚本中。
//sqlite3 xxx.db .dump xxx >xxx.sql
sqlite3>
.output xxx.sql
.dump xxx
3.2 数据的导入
sqlite3 xxx.db < xxx.sql
含义:将xxx.sql中的语句在xxx.db中执行。
=================================================================
数据库编程接口
1、头文件: sqltie3.h
编译过程: -lsqlite3
2、数据库的操作函数/框架
打开/创建数据库 ===》执行数据库操作指令(增加,删除,改变,查询)
===》关闭数据库
3、打开数据库: sqlite3_open
int sqlite3_open(char * path,sqlite ** db);
功能:从指定的path路径下打开数据库并将数据库的地址指向db指针。
如果db 不存在,则会自动创建该库。
参数:path 数据库的路径+名称
db 数据库指针。
返回值:成功 0
失败 -1;
int sqlite3_close(sqlite * db)
功能:关闭指定的sqlite3数据库。
参数:db 要关闭的对象
返回值:成功 0
失败 -1;
操作:
int sqlite3_get_table(); ===>主要用于查询
int sqlite3_get_table(sqlite*db,char *sql,cahr ***rest,
int *nrow,int * ncol,char ** errmsg);
功能:从指定的db数据库中使用sql语句来查询。
参数:db 要查询数据的数据库
sql 要执行的查询语句
rest 结果集,指向二维数组的指针。
nrow 结果集中的数据行的个数。
ncol 结果集中的数据列的个数。
errmsg 错误信息。
返回值:成功 0
失败 -1;
练习: 使用以上函数完成指定id的信息查询。
eg: ./a.out 5 ===>查询id=5 的信息并打印输出。
int sqlite3_exec(); ===》所有四种操作都支持。
原型:int sqlite3_exec(sqlite* db,char *sql, sqlite3_callback fun,
void *arg,cahr ** errmsg);
功能:通过该函数可以将sql语句中的所有动作执行,不限于查询动作。
参数:db 要操作的数据库指针
sql 要执行的sql语句
arg 回调函数的参数。
errmsg 错误信息。
fun 回调函数,属于如下结构:
int fun(void * arg,int f_num,char ** f_value,char ** f_name);
功能;该回调函数只有在sqlite3_exec中的sql是查询语句的时候有效。
参数:arg 由sqlite3_exec 传入的参数
f_num 查询的结果集中的字段的个数。
f_value 查询结果中的字段的值。
f_name 查询结果中的字段的名称。
返回值:成功 0
失败 -1;
返回值:成功 0
失败 -1;
注意:
回调函数必须有返回值,否则可能出现查询不完整。
回调函数的调用取决与sql语句的查询结果,每一条记录
会自动执行一次回调函数。
回调函数中的f_num是查询的列的个数
f_value 是每个查询结果中列的值
f_name 是每个查询结果中列的名称
sqlite3_free(db)===>一般用于查询或者执行失败的是调用。
作业:
设计一个dict.db的数据库,其中至少有一个t_word表
表至少有如下两个字段: word value
读dict.txt文件将文件内容分割,将文件中第一列数据
存储到dict.db中t_word表的word字段中。
第二列存储到value字段中。