什么是嵌入式数据库

嵌入式数据库与非嵌入式数据库的差别,在于运行模式的差别。并不是运行在嵌入式手持设备上的数据库就是嵌入式数据库,那种数据库我们通常称做嵌入式移动数据库。理论上讲,嵌入式设备一样可以运行网络数据库的服务端程序。

嵌入式数据库是指运行在本机上、不用启动服务端的轻型数据库,它与应用程序紧密集成,被应用程序所启动,并伴随应用程序的退出而终止。

从这个意义上讲,似乎所有单机数据库都可以算嵌入式数据库,比如Access,Paradox,DBF等等,因为它们都不用启动数据库服务器即可使用。然而,我们通常不将上述数据库归入嵌入式数据库,而只将它们归入“桌面数据库”,甚至“文件型数据库”,因为这些数据库的完备性、存储容量及性能方面存在较大的缺陷。

嵌入式数据库支持的数据都是TB文件级别,更由于嵌入式数据库具备高性能的特点,可以预测,单机数据库的未来将是嵌入式数据库的天下。

嵌入式数据库三雄
目前,嵌入式数据库市场主要由三个产品分割:SQLite,Birkeley DB,Firebird嵌入服务器版,巧的是,这三个数据库产品都是开源软件。

SQLite

主页:http://www.sqlite.org

SQLite诞生于2000年5月,这几年增长势头迅猛无比,目前版本是3.3.8。

SQLite的特点如下:

1、无需安装配置,应用程序只需携带一个动态链接库。

2、非常小巧,For Windows 3.3.8版本的DLL文件才374KB。

3、ACID事务支持,ACID即原子性、一致性、隔离性、和持久性(Atomic、Consistent、Isolated、和 Durable)。

4、数据库文件可以在不同字节顺序的机器间自由的共享,比如可以直接从Windows移植到Linux或MAC。

5、支持数据库大小至2TB。

Berkeley DB

主页:http://www.oracle.com/database/berkeley-db/index.html

Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库,它于1991年发布,号称“为应用程序开发者提供工业级强度的数据库服务”,可谓是老牌悍将。Sleepycat现已被甲骨文(ORACLE)公司收购。

Berkeley DB的特点如下:

1、嵌入式,无需安装配置。

2、为多种编程语言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP等等。

3、轻便灵活。它可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。

4、可伸缩。它的Database library才几百KB大小,但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库。

Firebird嵌入服务器版(Embedded Server)

主页:http://www.firebirdsql.org

从Interbase开源衍生出的Firebird,充满了勃勃生机。虽然它的体积比前辈Interbase缩小了几十倍,但功能并无阉割。为了体现Firebird短小精悍的特色,开发小组在增加了超级服务器版本之后,又增加了嵌入版本,最新版本为2.0。

Firebird的嵌入版有如下特色:

1、数据库文件与Firebird网络版本完全兼容,差别仅在于连接方式不同,可以实现零成本迁移。

2、数据库文件仅受操作系统的限制,且支持将一个数据库分割成不同文件,突破了操作系统最大文件的限制,提高了IO吞吐量。

3、完全支持SQL92标准,支持大部分SQL-99标准功能。

4、丰富的开发工具支持,绝大部分基于Interbase的组件,可以直接使用于Firebird。

5、支持事务、存储过程、触发器等关系数据库的所有特性。

6、可自己编写扩展函数(UDF)。

嵌入式数据库特性对比
产品名称

SQLite

Berkeley DB

Firebird嵌入服务器版

当前版本

3.3.8

4.5.20

2.0

速度

最快

稳定性

数据库容量

2TB

256TB

64TB

SQL支持

大部份SQL- 92

不支持

完全SQL-92与大部份SQL-99

Win32平台下最小体积

374KB

840KB

3.68MB

数据操纵

SQL

仅应用程序接口

SQL

开发接口

C, C++, PHP, Java, Delphi, Python .net(有些是第三方厂商开发的)

从以上对比中,我们可以看到,最短小精悍的是SQLite,它的性能也是最高的,Berkeley DB比较特殊,因为它不是用SQL语言来操纵数据的,Firebird嵌入版的体积对比之下显得稍大了些,但它对关系数据库特性的支持是最好的,如果要考虑到今后或许要将数据库升级成网络版本,就要选Firebird了。

嵌入式数据库开发布署举例
例1、用Delphi开发基于SQLite的单机版应用程序

因为SQLite自带C、C++、Java接口,所以我这里举用Delphi开发的例子。

使用组件:第三方组件ASQLite。

下载地址:http://www.aducom.com/cen/download.php?list.2

选择后边是.D的,就是for Delphi的组件。

下载解压之后,即可开始用Delphi打开dpk组件包编译安装。

如果您的Delphi版本比较高,比如是Delphi 2006,那么就编译asqlite3.dpk与asqlite3pkg.dpk,之后再安装asqlite3pkg.dpk包即可。

然后在Delphi组件面板里可以看得到ASQLite组件,如图:

现在就可以用它开发你的程序了,基于SQLite小巧的原因,特别推荐你在布署远程应用时用它,比如监控啊,木马啊什么的。

OK,为了使我们的例子更详细,下面讲讲怎么用ASQLite组件创建、连接数据库,并建立一个数据表。

新建一个窗体,放一个TASQLite3DB,命名为DB1,将它的Database(数据库)设为test.sqb,放一个TASQLite3Query,命名为Query1,将它的Connection指向DB1,然后放入两个按钮,第一个按钮的作用是创建或连接数据库,第二个按钮的作用是建立数据表。

如下图:

“连接”按钮事件的代码如下:

DB1.Open;

执行完这条语句之后,如果应用程序当前目录下不存在test.sqb文件,则自动创建并连接它。

“建表”按钮事件的代码如下:

Query1.StartTransaction;

try

Query1.Close;

Query1.SQL.Text:='create table student(sname vchar(30),age integer)';

Query1.ExecSQL;

Query1.Commit;

except

Query1.RollBack;

end;

执行完这些语句之后,在Test.sqb数据库里将创建数据表student。

现在,请将您下载的SQLite的动态链接库sqlite3.dll文件复制到应用程序目录下。

之后,可正常运行。

布署时,也应将sqlite3.dll文件一起打包。

例2、使用C++语言开发基于Firebird嵌入版的应用程序。

由于Firebird衍生于Interbase,所以Delphi对它的支持最好,IBX,DBX,Fibplus等都可以直接使用它,只要注意将接口文件改为fbembed.dll即可。在此不再多言。

对于C++这种最通用的语言,我们有一个更好的组件可以选择:IBPP。

IBPP主页:http://www.ibpp.org/

IBPP是用C++封装的Firebird接口,最新版本2.5.2.2。

只要在C++里引用all_in_one.cpp文件,就可以使用它的功能。

可以用IBPP:atabase类连接数据库,用IBPP::Transaction类控制事务,IBPP::Statement类可以获取数据集。下面展示一段代码,功能为:先连接d:/demo.fdb文件,然后从student表里选择所有记录,遍历所有记录之后,显示最后一条记录的sn与sname字段。为了使演示更直观,省去了异常处理。

示例代码:

#define IBPP_WINDOWS  //运行于Windows平台的预先声明

#include "ibpp/all_in_one.cpp"

……

IBPP:atabase db1;

db1=IBPP:atabaseFactory("","d:/demo.fdb","sysdba","masterkey";

db1->Connect();

IBPP::Transaction tr1=IBPP::TransactionFactory(db1,IBPP::amWrite,

IBPP::ilConcurrency,IBPP::lrWait, IBPP::tfNoAutoUndo);

tr1->Start();

IBPP::Statement st1=IBPP::StatementFactory(db1,tr1);

st1->Prepare("select * from student";

st1->Execute();

std::string sn,sname;

st1->Fetch();

st1->Get(1,sn);

st1->Get(2,sname);

tr1->Commit();

Label1->Caption=sn.c_str();

Label2->Caption=sname.c_str();

最后2行语句为显示结果的,不同开发平台应该使用不同的方法演示,请勿直接复制源代码。

布署时,还应该带上如下文件:fbembed.dll,ib_util.dll,icudt30.dll,icuin30.dll,icuuc30.dll,为了更通用,还可以带上VC++ 7.1的运行库msvcp71.dll,msvcr71.dll两个文件。

三种主要嵌入式数据库相关推荐

  1. 三种流行的数据库查询表记录数【转】

    现在三种比较流行的数据库查询表记录数分别如下: MySql: use information_schema; select table_name,table_rows from tables wher ...

  2. 三种查看MySQL数据库版本的方法

    1.使用-V参数 首先我们想到的肯定就是查看版本号的参数命令,参数为-V(大写字母)或者--version 使用方法: D:\xampp\mysql\bin>mysql -V 或者 D:\xam ...

  3. mysql 分页查询web_JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)...

    JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)-1.jpg (40.23 KB, 下载次数: 0) 2018-8-18 13:34 上传 在开发过程中,经常做的一件事,也是最基本的事 ...

  4. 启动和退出mysql的三种方法_Oracle数据库几种启动和关闭方式

    为了方便广大考生更好的复习,帮考网综合整理提供了Oracle认证之Oracle几种启动和关闭方式,以供各位考生考试复习参考,希望对考生复习有所帮助. Oracle的几种启动和关闭方式 有以下几种启动方 ...

  5. mysql数据库latin1转utf8_三种转换Mysql数据库数据编码的窍门-latin1转utf8

    背景:某个操作系统的Mysql数据库数据库Databnsednname采用默认的latin1字符集,操作系统升级需求将所有数据转换成utf-8各式,目的数据库Databnse为newdbname(建库 ...

  6. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  7. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结

    本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...

  8. 怎么灵活使用Graph, Document, Key/Value 三种混合模型的数据库?--Java 10分钟教程

    这是一个关于如何用Java Sync Driver 4.1使用ArangoDB的简短教程.在不到10分钟的时间内,您将学会如何用Java 操作ArangoDB (ArangoDB on Github) ...

  9. Mybatis笔记整理1(基本文件与配置,三种方式完成数据库操作)

    基本文件与配置 pojo类,省略setget,tostring方法 public class User implements Serializable {/*** */private static f ...

最新文章

  1. Uva673 平衡的括号
  2. 专访阿里云萧少聪、曹龙:一家云厂商对入局数据库做了哪些思考?
  3. Shell编程基础---shell的结构、执行及变量
  4. 利用docker编译Android源码
  5. 怎么配置网站mysql数据库_本地DZ网站如何配置本地MYSQL数据库
  6. ITK:提取二进制图像中斑点的内部和外部边界
  7. 服务器系统内存,服务器系统内存使用情况
  8. 外部网络如何获取网口打印机的ip地址_Win7如何连接网络打印机?详细的新手DIY教程...
  9. 自己整理的css3动画库,附下载链接
  10. html怎么保存曲奇,自制曲奇饼能保存多久 这些存放方法你懂吗
  11. android10 三星升级计划,Android 10.0(Q OS)系统升级计划Androi
  12. POJ 2115 模线性方程 ax=b(mod n)
  13. python爬虫利器p_Python:网络爬虫相当利器
  14. pm2启动jenkins不存在tty的问题
  15. C语言实现学生信息管理系统
  16. python少儿编程面试题-《与孩子一起学编程》python自测题
  17. Linux-v10.0
  18. Adobe或QQ的oxc000007b错误解决方案.
  19. 地球内部热量从而何来?其中50%热量来源不明
  20. 高等教师资格证考试复习笔记-高等教育学-(6)-高等学校的教师和学生

热门文章

  1. 小红书去水印代码_PHP语言对接抖音快手小红书视频/图片去水印API接口源码
  2. Linux培训教程 浅谈:PHP在linux上执行外部命令(整理)
  3. 线性代数笔记(1):线性方程组
  4. 【数据库】第三章 关系数据库标准语言—SQL 笔记
  5. 鼠标连点器同时点多个位置_一台电脑登录多个微信,简单,按住ENTER,鼠标快速点,扫描OK...
  6. 机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)...
  7. 乐高创意宝典-机械和机构篇pdf格式下载
  8. 【Microsoft Store打不开(Microsoft Store需要联网。你似乎没有联网。)】
  9. 回收站文件 清除了如何恢复
  10. Mac 如何重置 root 密码