前言:想要寫出一篇引人入勝的文章?我們特意為您整理了多類型數據庫存儲及訪問實現范文,希望能給你帶來靈感和參考,敬請閱讀。
摘要:軟件結構主要包括B/S結構、C/S結構等,無論哪種結構的軟件,數據庫應用占有很大的比例,常用的數據庫包括MySQL、Oracle等多種類型,針對這一特點,介紹了多種類型數據庫的存儲與訪問的實現方法。
關鍵詞:數據庫;多類型;多態性;抽象
工廠軟件結構主要包括B/S結構、C/S結構等。B/S結構的軟件主要應用于消費、OA、ERP等方面;C/S結構的軟件主要應用于工業控制、電力監控等行業軟件。無論哪種結構的軟件,數據庫應用占有很大的比例。常用的數據庫包括SQLlite、MySQL、Oracle和SQLServer等,數據庫的訪問技術有ODBC、ADO、JDBC和動態鏈接庫等,軟件運行環境包括嵌入式系統、Windows和Lin-ux等。這就需要提供一個數據庫接口技術,該接口技術能滿足多種類型數據庫,能運行在多種類型的操作系統上。該接口的提供具有很重要的意義:程序員不需要過多的關注各種數據庫訪問技術,更多地關注在實際的業務邏輯上;可以用在不同的應用軟件系統中,使得代碼的復用性高。
1接口設計
數據庫軟件包括SQLlite、MySQL、Oracle和SQLServ-er等,數據庫的訪問技術有ODBC、ADO、JDBC和動態鏈接庫等,考慮到JDBC只能用于Java,ODBC和A-DO在嵌入式系統中并不支持。而SQLlite提供了開源代碼用于對數據庫進行存儲與訪問,MySQL和Oracle等數據庫提供了不同操作系統的動態鏈接庫和頭文件用于對數據庫進行存儲與訪問。因此,為了適應不同類型數據庫軟件和不同類型操作系統的要求,本接口使用動態鏈接庫的訪問技術對數據庫數據庫進行存儲與訪問。無論是哪種數據庫,訪問接口均需要對數據庫進行連接、查詢、插入、刪除和關閉等操作,而SQLLite、MySQL等數據庫又有各自的特性。根據這個特點,就自然想到了使用抽象工廠和C++的多態性實現數據庫的訪問接口。定義基類TDBAccessBase實現數據庫訪問,定義TDBAccessSQLlite繼承基類用于訪問SQLlite數據庫。用同樣方法定義子類用于訪問MySQL、Oracle等數據庫。數據庫的訪問設計已經可以滿足訪問數據庫的要求。但是應用程序在使用接口時需要根據不同的數據庫類型創建不同的子類的對象,這不能滿足代碼的復用性高的要求。因此,定義TDBInstanceBase實現訪問實例的基類,在此基類中包含訪問接口基類TDBAccessBase的對象,在構造函數中傳入數據庫類型,再根據傳入的數據庫類型創建不同的子類。定義TDBInstanceTable-Name,TableName對應數據庫中的表名稱,該類繼承訪問實例的基類TDBInstanceBase。他們之間的關系圖如圖1所示。在進行數據庫的訪問完成后,每種類型的數據庫會返回不同的結果集,如果在應用程序調用數據接口后也返回不同的數據集,就不能在應用程序中屏蔽每種數據庫的差異。為了解決這個問題,在數據庫存儲和訪問接口中將返回的結果集的記錄讀出并保存在內存中,供應用程序調用。
2訪問接口實現
定義枚舉TDBType變量用于標識數據庫的類型。TDBType的定義如下:定義結構TDBConfig,該結構包括的屬性有host、port、user、passwd、dbName和dbPath。TDBConfig具體定義如下:TDBAccessBase中實現對數據庫的打開、關閉、查詢和定位等操作的虛函數;定義curRow用于標識數據庫讀取的當前位置;還定義了結構TRowData和TTable-Data的對象,用于將返回的結果集的記錄保存。TD-BAccessBase的聲明如下:TDBAccessMySQL對MySQL數據庫的操作,是TD-BAccessBase的子類,在該類中調用MySQL提供的動態鏈接庫,具體實現數據庫的打開、關閉、查詢和定位等功能。聲明如下:SQLlite、Oracle等數據庫采用類似于對MySQL定義的方法實現。
3實例接口實現
在實例基類TDBInstanceBase中定義了訪問接口的基類TDBAccessBase的對象指針dbAccess,實例基類的構造函數傳入數據庫的配置和類型,構造函數根據數據庫的類型創建具體數據庫訪問接口的對象。實例基類中對數據庫的打開、關閉、查詢和定位等方法就是調用對象dbAccess中對應的方法。實例基類的聲明如下:字段用戶編號和用戶名稱,則定義結構TUserTable,在TUserTable中包含兩個屬性Number和Name。則用戶表的實例聲明如下:
4結語
采用抽象工廠和多態性接口設計模式,使得數據庫的訪問代碼與應用程序進行了分離,減少了它們之間的耦合性,有較好的重用性和較高的效率。
參考文獻
[1]鄢濤,趙衛東,周曉清.基于C語言訪問MySQL數據庫的研究與實現[J].成都大學學報(自然科學版),2017,36(2):161-164.
[2]艾志剛,李丹.數據庫訪問設計[J].內燃機與配件,2017,10:95-97.
[3]祝玲.C語言訪問數據庫[J].計算機光盤軟件與應用,2012,14:181-182.
作者:薛建中 單位:南京藍人電力科技有限公司