linux c 之数据库

来源:互联网 发布:网络舆论暴力事件 编辑:程序博客网 时间:2024/06/05 07:11

一、数据库的基本概念

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,否则返回其他值

0 0
原创粉丝点击