您的位置:首页 > 运维架构 > Linux

linux c 之数据库

2017-01-19 21:56 204 查看
一、数据库的基本概念

1、什么是数据库?

数据库文件是一种特殊的文件。

数据库就是一个有结构的、集成的。可共享的统一管理的数据集合。它不仅包括数据本身,而且包括相关数据之间的联系。数据库技术主要研究如何存储、使用和管理数据。

2、数据库是如何存储数据的?

主要分为三种模型

1、层次型模型

2、网状模型

3、关系型模型

3、什么是关系型数据?



主流的数据库都采用关系型数据模型

4、数据库如何管理数据?

1、数据库管理系统,简称DBMS.



2、数据库管理的工作模型



4、数据库系统结构

从数据库最终用户的角度来看,数据结构分为集中式、分布式、客户/服务器和并行结构等。

1、本地小型数据库

2、主从式数据库

3、分布式数据库

4、客户机、服务器数据库

5、常见的关系型数据库

Oracle SQL Server DB2 Access

二、嵌入式数据库的基本要求

1、体积适当

2、可移植性

3、编程接口简单

4、代码开源

2、常见的嵌入式数据库

Sybase 、SQL、Anywhere、Oracle TimesTen、

Berkley DB、Pervasive、Jet Engine、Firebird

SQLite

三、SQLite3的使用和API

1、SQL语法

* 数据定义(DDL):用户定义、删除和修改数据模式
* 数据查询(DQL):用于查询数据
* 数据操纵(DML):用于增、删、改数据
* 数据控制(DCL):用于控制数据访问权限




SQL的语法很像自然语言。每个语句都是一个祈使句,以动词开头,表示所要做的动作。

SQL由命令组成,每个命令以分号(;)结束。如下面是2个独立的命令:

select id,name from dtudent;

insert into student values(NULL,’wang’);

三、SQL语句建立一个数据库的过程

1、touch student.db;

创建一个数据库

2、sqlite3 student.db

打开数据库

3、create table student ( id integer primary key,name text);

创建一个表

4、.schema查看

5、drop student 删除表

6、alter table student rename to studen2 重命名表

7、alter table student ass column sex text; 在表中添加列

8、update student set name = ‘wang1’ where name = ‘zhangsan’;

更新数据

9、insert into student(id,name)values(‘1’,”wang);

10、select * from student 查看表中所有数据

select的查询

select <目标列名序列>(需要哪些列) from <表名序列>(从哪些表) where <查询条件>(根据什么条件)

一般形式为: 列名 [NOT ] LIKE 匹配串

作用:查找指定列名与匹配串常量匹配的元组。

匹配串类型:匹配串可以是字符串常量,也可以含有通配符。

通配符种类:

%(百分号):匹配0个或多个字符。

_(下划线):匹配一个字符。

[ ]:匹配括号中的字符

[∧ ]:不匹配括号中的字符

例:

SELECT Sname FROM Student WHERE Sname NOT LIKE ‘刘%’;

下面讲一些API函数:

1、打开

【函数原型】:

intsqlite3_open(constchar* fileName, sqlite3** ppDB);

【函数功能】:

打开一个数据库;若该数据库文件不存在,则自动创建。打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行。

【输入参数】:

fileName,待打开的数据库文件名称,包括路径,以’\0’结尾; 特别说明:SQLite 支持内存数据库,内存方式存储使用文件名“:memory:”

【输出参数】:

ppDB,返回打开的数据库句柄;

【返回值】:执行成功返回SQLITE_OK,否则返回其他值;

2、关闭

【函数原型】:

intsqlite3_close(sqlite3* pDB);

【函数功能】:关闭一个打开的数据库;

【输入参数】:pDB,打开的数据库句柄

【输出参数】: 无

【返回值】:执行成功返回SQLITE_OK,否则返回其他值、

3、执行sql

【函数原型】:

intsqlite3_ exec(sqlite3* pDB, constchar * sql, sqlite_callbackcallback, void* para, char** errMsg);

【函数功能】:编译和执行零个或多个SQL 语句,查询的结果返回给回调函数callback

【输入参数】:

pDB,数据库句柄;sql,待执行的SQL 语句字符串,以’\0’结尾;callback,回调函数,用来处理查询结果,如果不需要回调(比如做insert 或者delete 操作时),可以输入NULL;

para,用户传入的参数,可以为NULL,该参数指针最终会被传给回调函数callback,供用户在回调函数中使用;

【输出参数】:errMsg,返回错误信息,注意是指针的指针。

【返回值】:执行成功返回SQLITE_OK,否则返回其他值

4、回调函数sqlite_callback介绍

typedef int (* sqlite_callback)(void * para,int columnCount,char * *

columnValue,char ** columnName);

【函数功能】:由用户处理查询的结果

【输入参数】:

para,从sqlite3_exec()传入的参数指针;

columnCount, 查询到的这一条记录有多少个字段(即这条记录有多少列);

columnValue,查询出来的数据都保存在这里,它实际上是个1 维数组(不要以为是2 维数组),每一个元素都是一个char * 值,是一个字段内容(用字符串来表示,以‘\0’结尾);

columnName,与columnValue是对应的,表示这个字段的字段名称。

输出参数:无

【返回值】:执行成功返回SQLITE_OK,否则返回其他值

5、

【函数原型】:

int sqlite3_ get_table(sqlite3* pDB, constchar sql,char * pResult, int rowCount,int* columnCount, char errMsg);

【函数功能】:执行SQL 语句,通过一维数组返回结果;一般用于数据记录查询

【输入参数】:pDB,打开的数据库句柄;sql,待执行的SQL 字符串,以’\0’结尾;

【输出参数】:rowCount,查询出多少条记录(即查出多少行);

columnCount,查询出来的记录有多少个字段(多少列);

errMsg,返回错误信息;

pResult,查询结果,是由字符串组成的一维数组(不要以为是二维数 组,更不要以为是三维数组)。它的内存布局是:第一行是字段名称,后面紧接着每个字段的值;

【返回值】:执行成功返回SQLITE_OK,否则返回其他值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息