[Linux C编程]数据库

来源:互联网 发布:广东广电网络套餐介绍 编辑:程序博客网 时间:2024/06/06 03:56

数据库

1.有哪些常用的数据库,请分别介绍一下。

目前有许多数据库产品,如Oracle、SQL Server、DB2、MySQL 、Access,SQLite3等产品各以自己特有的功能,在数据库市场上占有一席之地。

(1)Oracle是1983年推出的世界上第一个开放式商品化关系型数据库管理系统。它采用标准的SQL结构化查询语言,支持多种数据类型,提供面向对象存储的数据支持,具有第四代语言开发工具,支持Unix、Windows NT、OS/2、Novell等多种平台。除此之外,它还具有很好的并行处理功能。Oracle产品主要由Oracle服务器产品、Oracle开发工具、Oracle应用软件组成,也有基于微机的数据库产品。主要满足对银行、金融、保险等企业、事业开发大型数据库的需求。

(2)SQL即结构化查询语言(Structured Query Language,简称为SQL)。SQL Server最早出现在1988年,当时只能在OS/2操作系统上运行。2000年12月微软发布了SQL Server 2000,该软件可以运行于Windows NT/2000/XP等多种操作系统之上,是支持客户机/服务器结构的数据库管理系统,它可以帮助各种规模的企业管理数据.

随着用户群的不断增大,SQL Server在易用性、可靠性、可收缩性、支持数据仓库、系统集成等方面日趋完美。特别是SQL Server的数据库搜索引擎,可以在绝大多数的操作系统之上运行,并针对海量数据的查询进行了优化。目前SQL Server已经成为应用最广泛的数据库产品之一。
由于使用SQL Server不但要掌握SQL Server的操作,而且还要能熟练掌握Windows NT/2000 Server的运行机制,以及SQL语言,所以对非专业人员的学习和使用有一定的难度。

(3)DB2是基于SQL的关系型数据库产品。20世纪80年代初期DB2的重点放在大型的主机平台上。到90年代初,DB2发展到中型机、小型机以及微机平台。DB2适用于各种硬件与软件平台。各种平台上的DB2有共同的应用程序接口,运行在一种平台上的程序可以很容易地移植到其他平台。DB2的用户主要分布在金融、商业、铁路、航空、医院、旅游等各个领域,以金融系统的应用最为突出。

(4)Access是在Windows操作系统下工作的关系型数据库管理系统。它采用了Windows程序设计理念,以Windows特有的技术设计查询、用户界面、报表等数据对象,内嵌了VBA(全称为Visual Basic Application)程序设计语言,具有集成的开发环境。Access提供图形化的查询工具和屏幕、报表生成器,用户建立复杂的报表、界面无需编程和了解SQL语言,它会自动生成SQL代码。Access被集成到Office中,具有Office系列软件的一般特点,如菜单、工具栏等。与其他数据库管理系统软件相比,更加简单易学,一个普通的计算机用户,没有程序语言基础,仍然可以快速地掌握和使用它。最重要的一点是,Access的功能比较强大,足以应付一般的数据管理及处理需要,适用于中小型企业数据管理的需求。当然,在数据定义、数据安全可靠、数据有效控制等方面,它比前面几种数据库产品要逊色不少。

(5)SQLite 是一个开源的嵌入式关系数据库,它在2000 年由D. Richard Hipp 发布。SQLite 可移植性好,很容易使用,很小,高效而且可靠。SQLite 嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部 看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

SQLite是一个内嵌式的数据库。数据库服务器就在你的程序中,其好处是不需要网络配置和管理。数据库的服务器和客户端运行在同一个进程中。这样可以减少网络访问的消耗,简化数据库管理,使你的程序部署起来更容易。所有需要你做的都已经和你的程序一起编译好了。

 

2.请简单介绍一下数据的三级模式结构

 

(1)外模式(External Schema) :

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

(2)模式(Schema) :

  模式也称为逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公用数据视图。一个数据库只有一个模式。模式是数据项值的框架。数据库系统模式通常还包含有访问控制、保密定义、完整性检查等方面的内容。

(3)内模式(internal Schema) :

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

 

3.创建数据库:

数据库文件格式:test.db

sqlite> sqlite3 test.db  

sqlite> create table test (id integer primary key, value text);

名为id的主键列:该列默认具备自动增长的属性;

名为value的简单文本域;

插入操作:

sqlite> insert  into test (id,value) values(1,’zhang’);

sqlite> insert  into test (id,value) values(2,’wang’);

sqlite> insert  into test  (value)  values(‘liang’);

sqlite> insert  into test  (value)  values(‘liang’);

查看数据:

sqlite> select * from test;

sqlite> select * from test order by name;

sqlite> select id from test;

sqlite> select name from test where id > 3;

sqlite> select name from test where id in (1,10);

sqlite> select name from test where id like ‘_2%’; //匹配第二个字符为2

sqlite> select * from test where name not like ‘[a-w]%’;

退出:

sqlite> .exit

4.(1)sqlite3_open

函数的作用:打开一个数据库

函数的原型:int sqlite3_open(const char * dbname,sqlite3 ** dB)

函数的参数:dbname:数据库的名称

        dB:数据库的句柄

返回值:操作成功:SQLITE_OK;

(2)sqlite3_close

函数的作用:关闭数据库

函数的原型:int sqlite3_close(sqlite3 *db)

(3)sqlite3_exec

函数的作用:执行sqlite3的语句

函数的原型:int sqlite3_exec(sqlite3 * db,const char *sql,int (*callback)(void *,int,char *,char **),void * para,char ** errmsg)

函数的参数:db:数据库的句柄

        sql:SQL语句

        callback:回调函数

        para:传入参数

        errmsg:错误的消息

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

(4)sqlite3_get_table

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

函数的原型:sqlite3_get_table(sqlite3* pDB, const char *sql,char ***pResult, int * rowCount,int * columnCount, char** errMsg)

函数的参数:pDB:数据库句柄

        sql:待执行的SQL字符串,以‘\0’结尾

        pResult:查询结果,是由字符串组成的一维数组,第一行为字段名称,紧跟着是每个字段的值。

        rowCount:查询出多少条记录(多少行)

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

       errMsg:返回错误信息

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

(5)sqlite3_free_table

函数的作用:释放查询结果占用的内存

函数的原型:void sqlite3_free_table(char **result);

函数的参数:result:通过函数sqlite3_get_table()查询到的记录结果

(6)sqlite3_callback(回调函数)

函数的作用:有用户处理查询的结构

函数的原型:typedef int (*sqlite_callback)(void* para,int columnCount,char** columnValue,char** columnName);

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

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

        数据都保存在这里,它实际上是个1 维数组(不要以为是2 维数组),每一个元素都是一个char * 

        值,是一个字段内容(用字符串来表示,以‘\0’结尾);

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

原创粉丝点击