网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 嵌入式系统 > 文章  
开源嵌入式数据库Berkeley DB和SQLite的比较
文章来源: CE china 文章作者: 未知 发布时间: 2006-05-28   字体: [ ]  
 

2.2 Berkeley DBS0Lite与普通数据库的差别

 

Berkeley DB引入了一些新的基本概念,使得数据库应用程序访问和管理数据库变得相对简单起来。

 

(1) 关键字和数据

 

关键字(key)和数据(data)是。Berkeley.DB用来进行数据库管理的基础,由这两者构成的key/data对,组成了数据库中的一个基本结构单元。整个数据库实际上就是由许多这样的结构单元构成的。通过使用这种方式,在通过API函数访问数据库时,只需提供关键字就能够访问到相应的数据。

 

关键字和数据在Berkeley DB中都是用一个名为DBT的简单结构来表示的。实际上两者都可以是任意长度的二进制数据。DBT的作用主要是保存相应的内存地址及其长度,其结构如下所示:

 

typedef struct

{

void*data

u_int32_t size

u_int32_t ulen

u_int32_f dlen

u_int32_f doff

u_int32_f flags

} DBT

 

在使用Berkeley DB进行数据管理时,缺省情况下是一个关键字对应于一个数据;但也可以将数据库配置成一个关键字对应于多个数据,而键值和数据必须是类com.sleepycat.db.Dbt的对象或其子类的对象。

 

(2) 对象句柄

 

Berkeley DB函数库定义的大多数函数都遵循同样的调用原则:首先创建某个结构,然后再调用该结构中的某些方法。从程序设计的角度来讲,这一点同面向对象的设计原则是非常类似的,即先创建某个对象的一个实例,然后再调用该实例的某些方法。正因为如此,.Berkeley DB引入了对象句柄的概念来表示实例化后的结构,并且将结构中的成员函数称为该句柄的方法。对象句柄的引入使得程序员能够凭借面向对象的思想,来完成对Berkeley DB数据库的访问和操作。

 

(3) 错误处理

 

对于任何一个函数库来说,如何对错误进行统一的处理都是需要考虑的问题。Berkeley DB提供的所有函数都遵循同样的错误处理原则,即函数成功执行后返回零,否则返回非零值。

 

对于系统错误(如磁盘空间不足),返回的是一个标准的值;而对于非系统错误,返回的则是一个特定的错误编码。例如,如果在数据库中没有与某个特定关键字所对应的数据,那么在通过该关键字检索数据时就会出现错误。此时函数的返回值将是DB—NOTF0uND,表示在数据库中并没有所请求的关键字。所有标准的e rrn0值都大于零,而由Berkeley DB定义的特殊错误编码则都小于零。

 

Berkeley DB提供了相应的函数来获得错误代号所对应的错误描述。一旦有错误发生,只需首先调用db_strerror( )函数来获得错误描述信息,然后再调用DB>err()DB->errx()就可以很轻松地输出格式化后的错误信息。

 

SQLite最大的特点在于其数据类型为无数据类型(typelessness)。这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。虽然在生成表结构的时候,要声明每个域的数据类型,但sQLite并不做任何检查。开发人员要靠自己的程序控制输入与读出数据的类型。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。

 

诚然,SQLite允许忽略数据类型,但是,仍然建议在Create Table语句中指定数据类型,因为数据类型有利于增强程序的可读性。SQLite支持常见的数据类型,如VARCHARNVARCHARTEXTINTEGERFLOATBOOLEANCLOBBLOBTIMESTAMPNUMERICVARYINGCHARACTERNATl0NAI, VARYINGCHARACTER

 

另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。比如:

 

CREATE TABLE MyTable (a INTEGERb TEXT)

INSERT INT0 MyTable VALIUES(00)

 

当执行查询SELECT count(*)FROM MyTable WHERE a==’00’;时,会返回一条记录。因为字段a的类型是整型,而数字000是相等的。而执行查询SELECT count(*)FROM MyTable WHERE b==‘00’:时,则不会返回记录。因为字段b是字符类型,字符00”0”是不相等的。

 

 
推荐文章
·嵌入式Linux平台的多协议路由器
·恰当选择嵌入式Linux环境下的GUI
·嵌入式Linux系统的MiniGUI研究和
·基于Linux的移动电话开发技术及
·嵌入式uClinux的内核结构和开发
·基于 GTK+ 和 X-window 的 GUI
·基于Qt/Embedded和Qtopia的GUI设
·开放源码嵌入式数据库 SQLite 简
·ucLinux下sqlite数据库移植全攻
·恰当选择嵌入式Linux环境下的GUI
·ARM的嵌入式Linux移植体验之操作
·ARM的嵌入式Linux移植体验之基本
·ARM的嵌入式Linux移植体验之应用
·ARM的嵌入式Linux移植体验之设备
 

 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·ARM的嵌入式Linux移植体
·U-Boot简介
·基于Qt/Embedded的GUI移
·基于Qt/Embedded和Qtopi
·U-BOOT的启动流程及移植
·ARM的嵌入式Linux移植体
·几种Linux嵌入式开发环
·ARM的嵌入式Linux移植体
相关文章
·嵌入式数据库
·嵌入式系统的USB虚拟串
·嵌入式系统的人机界面原
·双内核嵌入式处理器及其
·Linux 2.6 内核的嵌入式
·YAFFS文件系统在嵌入式L
·ARM7系统中实现CF卡存储
·基于μClinux的SoPC应用
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统