高级编程之数据结构

数 据 库

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字段中。

 

 


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值