日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

三种主要嵌入式数据库

發布時間:2023/12/3 综合教程 52 生活家
生活随笔 收集整理的這篇文章主要介紹了 三种主要嵌入式数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是嵌入式數據庫

嵌入式數據庫與非嵌入式數據庫的差別,在于運行模式的差別。并不是運行在嵌入式手持設備上的數據庫就是嵌入式數據庫,那種數據庫我們通常稱做嵌入式移動數據庫。理論上講,嵌入式設備一樣可以運行網絡數據庫的服務端程序。

嵌入式數據庫是指運行在本機上、不用啟動服務端的輕型數據庫,它與應用程序緊密集成,被應用程序所啟動,并伴隨應用程序的退出而終止。

從這個意義上講,似乎所有單機數據庫都可以算嵌入式數據庫,比如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兩個文件。

總結

以上是生活随笔為你收集整理的三种主要嵌入式数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。