劉之燁 雷聚超 胡靜宜
摘 要:服務(wù)器與數(shù)據(jù)庫之間的連接直接影響了DataSnap三層數(shù)據(jù)庫應(yīng)用系統(tǒng)的傳輸效率。現(xiàn)階段主流的連接技術(shù)為ADO與dbExpress。但是開發(fā)過程中存在著數(shù)據(jù)引擎兼容性不高、封裝繁瑣、連接邏輯復(fù)雜等問題。因此提出使用FireDAC數(shù)據(jù)引擎開發(fā)DataSnap三層C/S結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用。文章根據(jù)在Delphi xe10平臺的開發(fā)過程得出FireDAC數(shù)據(jù)引擎具有連接邏輯簡單,數(shù)據(jù)庫兼容性強(qiáng)等優(yōu)點(diǎn),更適合用于開發(fā)DataSnap三層數(shù)據(jù)庫應(yīng)用。
關(guān)鍵詞:FireDAC; DataSnap技術(shù);三層C/S結(jié)構(gòu)
中圖分類號:TP311 文獻(xiàn)標(biāo)志碼:A 文章編號:2095-2945(2017)36-0120-02
引言
三層C/S結(jié)構(gòu)較于傳統(tǒng)的兩層C/S結(jié)構(gòu)具有更好穩(wěn)定性、安全性、易維護(hù)性,同時也具有更快的響應(yīng)速度等優(yōu)點(diǎn)。因此在開發(fā)大型數(shù)據(jù)庫應(yīng)用系統(tǒng)的過程中,三層C/S結(jié)構(gòu)的應(yīng)用越來越普遍。
Delphi是一個功能強(qiáng)大,基于Windows環(huán)境,面向?qū)ο蟮目梢暬瘧?yīng)用軟件開發(fā)工具。它結(jié)合了傳統(tǒng)的編程語言O(shè)bject Pascal和數(shù)據(jù)庫語言的強(qiáng)大功能,既可以用于傳統(tǒng)算術(shù)編程又可以用于數(shù)據(jù)庫編程。Delphi中的DataSnap技術(shù)體系,提供了客戶端和應(yīng)用服務(wù)器之間傳遞數(shù)據(jù)庫信息的機(jī)制,同時豐富的組件庫給程序的設(shè)計帶來極大的便利。Delphi已經(jīng)成為當(dāng)前最流行的C/S開發(fā)工具之一。
開發(fā)DataSnap三層數(shù)據(jù)庫應(yīng)用的過程中,必須首先建立與數(shù)據(jù)庫之連接,它是應(yīng)用程序和后臺數(shù)據(jù)庫之間交換數(shù)據(jù)的前提。
1 FireDAC基本原理
FireDAC不使用IAppServer接口,而是把DataSnap服務(wù)器當(dāng)作API來呼叫??蛻舳耸褂肨FDConnection組件通過TCP/IP或HTTP/HTTPS協(xié)議連接使用FireDAC開發(fā)的DataSnap服務(wù)器,使用TFDStoredProc組件呼叫服務(wù)器API。
如果客戶端呼叫的API需要回傳數(shù)據(jù),那么FireDAC會以Stream的格式傳遞數(shù)據(jù),如果要對數(shù)據(jù)進(jìn)行包含異動的工作,那么可以搭配使用FireDAC的中央快儲功能來幫助程序員對數(shù)據(jù)進(jìn)行異動。
在DataSnap架構(gòu)中要使用FireDAC的中央快儲功能,需要在應(yīng)用服務(wù)器使用TFDSchemaAdapter組件。而在FireDAC客戶端則需要使用TFDTableAdapter組件把客戶端TFDMemTable罪案中的數(shù)據(jù)從應(yīng)用服務(wù)器取回或是從客戶端把異動的數(shù)據(jù)更新回應(yīng)用層服務(wù)器。
因此要使用FireDAC開發(fā)DataSnap應(yīng)用,需要下列步驟:
(1)開發(fā)使用FireDAC的DataSnap服務(wù)器,并使用FireDAC中央快儲功能。
(2)開發(fā)使用FireDAC的客戶端,使用TFDConnection連接服務(wù)器。
(3)使用TFDStoredProc組件呼叫服務(wù)器API。
(4)處理數(shù)據(jù)流(Stream Data)。
(5)使用TFDStoredProc組件呼叫服務(wù)器的API把異動數(shù)據(jù)回傳給FireDAC的DataSnap服務(wù)器,再由FireDAC的中央快儲功能把數(shù)據(jù)更新回數(shù)據(jù)庫。
2 三層數(shù)據(jù)庫應(yīng)用的實(shí)現(xiàn)過程
2.1 創(chuàng)建數(shù)據(jù)庫
(1)在Mysql中創(chuàng)建名為XATU的數(shù)據(jù)庫,在數(shù)據(jù)庫中創(chuàng)建TEST表,增加兩列,列名分別為“xm”和“xh”并錄入信息作為查詢之用。
(2)將MySQL的動態(tài)鏈接庫文件libmysql.dll存放到C:\WINDOWS\SYSTEM32目錄下。
2.2 創(chuàng)建DataSnap服務(wù)器
(1)主菜單“File”->“New”->“Other”在“New Items”對話框中選擇DataSnap Server,啟動向?qū)??!癙roject Type”選擇“Forms Application”、 “Application Type”選擇“VCL Application” 默認(rèn)TCP/IP為通訊協(xié)議,測試端口211,選擇TDataModule 作為服務(wù)器端API類別。完成后,生成三個工程文件ServerContainerUnit1.pas、Unit1.pas。ServerMethodsUnitsUnit1.pa
s存放網(wǎng)絡(luò)服務(wù)相關(guān)的控件,Unit1.pas是服務(wù)器的主界面,ServerContainerUnit1.pas是我們需要進(jìn)一步開發(fā)的工程文件。
(2)打開ServerMethodsUnitsUnit1.pas,加入TFDSchemaAd
apter、TFDQuery、TFDStanStorageJSONLink等組件。TFDStanStor
ageBinLink和TFDStanStorageJSONLink的作用是讓FireDAC可以處理2進(jìn)制(TCP/IP)和JSON(Http)格式的數(shù)據(jù)。
(3)進(jìn)入Code單元,在Public下添加代碼“function GET:TStream;”。添加的GET方法可以讓客戶端查詢信息。FireDAC中要在客戶端和應(yīng)用服務(wù)器之間傳遞數(shù)據(jù),只需要傳遞TStream形態(tài)的數(shù)據(jù)。GET()方法首先建立一個TMemoryStream對象,再開啟FDQuery1組件取得數(shù)據(jù),然后把FDQuery1組件中的數(shù)據(jù)對象通過TMemoryStream類中的SaveToStream方法拷貝到TMemoryStream對象中,最后把TMemoryStream對象回傳給客戶端。
(4)編譯運(yùn)行DataSnap服務(wù)器。
2.3 創(chuàng)建DataSnap客戶端endprint
(1)主菜單“File”->“New”->“Muti-Device Application”,在窗體中添加TFDConnection、TFDGUIxWaitCursor、TFDPhysDSDriverLink等組件。
(2)在主界面的Button1的OnClick事件中呼叫GETXX()方法和SHOWXX()方法。GETXX方法獲取數(shù)據(jù),SHOWXX()方法展示數(shù)據(jù)。
GETXX()方法只需要呼叫FDStoredProc1的ExecProc()方法,F(xiàn)ireDAC就可以呼叫DataSnap服務(wù)器中指定的服務(wù)方法(GET),呼叫成功后DataSnap服務(wù)器回傳的數(shù)據(jù)回存儲在FDStoredProc1的第一個參數(shù)中,型態(tài)是ftBlob。創(chuàng)建一個TStringStream對象把FDStoredProc1的第一個參數(shù)內(nèi)容作為建構(gòu)元參數(shù),TStringStream對象的內(nèi)容就是回傳的結(jié)果,把TStringStream對象包含的數(shù)據(jù)流位置設(shè)定到起始位置,再通過FDMemTable1組件的LoadFromStream()方法從TStringStre
am對象中讀取數(shù)據(jù)流并還原。
(3)編寫代碼并執(zhí)行客戶端,點(diǎn)擊Button按鈕,數(shù)據(jù)庫中的信息已經(jīng)通過應(yīng)用層服務(wù)器傳輸?shù)娇蛻舳?,并展示在ListView組件中。
至此一個基于FireDAC的DataSnap三層數(shù)據(jù)庫應(yīng)用已經(jīng)搭建完成,進(jìn)一步的開發(fā)除了需要根據(jù)用戶需求完善客戶端界面外,還需要根據(jù)需求編寫對應(yīng)的應(yīng)用層業(yè)務(wù)邏輯,完成相應(yīng)的功能。
3 結(jié)束語
根據(jù)以上開發(fā)過程可以得出FireDAC有以下優(yōu)點(diǎn):
(1)跨數(shù)據(jù)庫平臺。FireDAC作為一個通用數(shù)據(jù)訪問庫,用于開發(fā)與企業(yè)數(shù)據(jù)庫連接的多個設(shè)備的應(yīng)用程序。通過其強(qiáng)大的通用架構(gòu),F(xiàn)ireDAC可實(shí)現(xiàn)從Delphi到InterBase,SQLite的本機(jī)高速直接訪問。
(2)訪問快速。FireDAC數(shù)據(jù)集建立在強(qiáng)大的數(shù)據(jù)訪問引擎之上。這種輕便,有效和靈活的引擎可以直接在應(yīng)用程序中使用,并且是數(shù)據(jù)集API的強(qiáng)大基礎(chǔ)。
(3)良好的兼容性。FireDAC可以使用TDataSet后代類,包括TFDQuery,TFDMemTable,TFDStoredProc和TFDTable。同時數(shù)據(jù)集類與原始BDE數(shù)據(jù)集和ClientDataSet高度兼容。
FireDAC技術(shù)和DataSnap技術(shù)相結(jié)合,為三層數(shù)據(jù)庫應(yīng)用的開發(fā)提供了良好的支持,為構(gòu)建滿足不同需求的多層C/S體系的數(shù)據(jù)庫應(yīng)用程序打下了良好基礎(chǔ)。定會成為日后開發(fā)三層數(shù)據(jù)庫應(yīng)用的主流趨勢。
參考文獻(xiàn):
[1]李文生.采用Delphi實(shí)現(xiàn)三層客戶/服務(wù)器數(shù)據(jù)庫應(yīng)用程序[J].計算機(jī)工程,2000(7):170.
[2]張志強(qiáng).基于DataSnap技術(shù)實(shí)現(xiàn)三層C/S體系的數(shù)據(jù)庫應(yīng)用[J].軟件導(dǎo)刊,2011(10):167.
[3]楊長春.Delphi程序設(shè)計教程[M].北京:清華大學(xué)出版社,2016.endprint