Linux学习之 嵌入式数据库

嵌入式数据库

一.数据库综述

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

n  有结构的:数据是按一定的模型组织起来的。

n  集成的:数据库中集中存放着企业各种各样的数据

n  可共享的:数据库中的数据可以被不同的用户使用。

统一管理的:指的是数据库由DBMS统一管理,任何数据访问都是通过DBMS来完成的。

 

数据库特点:

数据结构化

共享性高,冗余度低,易扩充

数据独立性高

数据有DBMS统一管理和控制

 

数据模型的组成要素:数据结构 数据操作 数据的完整性约束

数据模型:层次型 网状 关系 面向对象

 

二.数据库系统简述

1.数据库系统的三级模式

外模式(子模式或用户模式):数据库用户(包括应用程序员和最终用户)看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式一般是模式的子集。一个模式可以有多个外模式。一个应用程序只能使用一个外模式。外模式是保证数据库安全性的一个有力措施

模式(逻辑模式或概念模式):数据库中全体数据的逻辑结构和特征的描述,一个数据库只有一个模式。

内模式(存储模式):数据库在物理存储器上具体实现的描述,是数据在数据库内部的表示方法,也是数据物理结构和存储方式的描述。一个数据库只有一个内模式

 

2.数据库系统结构:单用户数据库系统 主从式结构 分布式结构 客户/服务器结构

 

3.关系术语及定义:   关系:一个关系就是一张二维表 元组:表中的行称为元组

属性:关系中的一列称为一个属性  域:属性的取值范围

 

4.关系的候选键与主键

候选键:表中某一列(或若干列的最小组合)的值能惟一标识一个行,称该列或列组为候选键。(候选键取决于应用范围,如没有重复的学生姓名,则姓名是学生基本情况表的一个候选键)

主键:候选键其中之一作为区分行的惟一性标识符,称为主键(

外键:若一个表R1中的一个列或列组对应另一个表R2的主键,那么该列或列组称为表R1的外键

 

二.Sqlite数据库API

1.打开数据库

v  函数原型intsqlite3_open(const char* fileName, sqlite3** ppDB);

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

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

v  输出参数:ppDB,返回打开的数据库句柄;

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

 

 

2.关闭数据库

v  函数原型:int sqlite3_close(sqlite3* pDB);

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

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

v  输出参数: 无

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

 

 

3.调试

v  函数原型:constchar *sqlite3_errmsg(sqlite3* pDB);

v  函数功能:获取最近调用的API接口返回的错误说明,这些错误信息UTF-8的编码返回,并且在下一次调用任何SQLite API 函数时被自动清除;

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

v  输出参数: 无

v  返回值:错误说明的字符串指针

 

4.执行sql

v  函数原型:intsqlite3_exec(sqlite3* pDB, const char *sql, sqlite_callback callback,void*para, char** errMsg);

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

v  输入参数:pDB,数据库句柄;sql,待执行的SQL 语句字符串,以’\0’结尾;callback,回调函数,用来处理查询结果,如果不需要回调(比如做insert 或者delete 操作时),可以输入NULL;para,用户传入的参数,可以为NULL,该参数指针最终会被传给回调函数callback,供用户在回调函数中使用;

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

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

 

回调函数

v  输入参数:para,从sqlite3_exec()传入的参数指针;columnCount,查询到的这一条记录有多少个字段(即这条记录有多少列);columnValue,查询出来的数据都保存在这里,它实际上是个1 维数组(不要以为是2 维数组),每一个元素都是一个char * 值,是一个字段内容(用字符串来表示,以‘\0’结尾);columnName,与columnValue 是对应的,表示这个字段的字段名称。

v  输出参数:无

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

 

5.执行sql

v  函数原型:intsqlite3_get_table(sqlite3* pDB, const char *sql,char ***pResult, int *rowCount,int * columnCount, char** errMsg);

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

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

v  输出参数:rowCount,查询出多少条记录(即查出多少行);columnCount,查询出来的记录有多少个字段(多少列); errMsg,返回错误信息;pResult,查询结果,是由字符串组成的一维数组(不要以为是二维数组,更不要以为是三维数组)。它的内存布局是:第一行是字段名称,后面紧接着每个字段的值;

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

你可能感兴趣的:(Linux,C)