一種數(shù)據(jù)庫(kù)操作的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)操作的方法和裝置。
【背景技術(shù)】
[0002] 近年來(lái),數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)發(fā)展很快,經(jīng)歷了從傳統(tǒng)的連接模型到新的斷開(kāi)連接模 型,從最初只能訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)發(fā)展到目前能訪問(wèn)包括關(guān)系數(shù)據(jù)庫(kù)在內(nèi)的各種數(shù)據(jù)源,女口 文件目錄、文本內(nèi)容、電子表格、電子郵件等發(fā)展過(guò)程。
[0003] 目前常用的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有:開(kāi)放數(shù)據(jù)庫(kù)互連(ODBC,化en Dat油ase Connectivity)、數(shù)據(jù)存取對(duì)象(DAO, Data Access Object)、遠(yuǎn)程數(shù)據(jù)對(duì)象(畑0, RanoteDataObject)、ActiveX 數(shù)據(jù)對(duì)象(ADO, ActiveX Data Objects)、ADO.肥Τ 等。
[0004] ODBC是為客戶應(yīng)用程序訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)時(shí)提供的一個(gè)統(tǒng)一的C語(yǔ)言編程API接 口,通過(guò)送個(gè)接口可訪問(wèn)任何提供了 ODBC驅(qū)動(dòng)程序的數(shù)據(jù)庫(kù)。目前所有的關(guān)系數(shù)據(jù)庫(kù)都提 供ODBC驅(qū)動(dòng)程序,送使它的應(yīng)用非常廣泛,但存在訪問(wèn)速度慢、函數(shù)眾多、使用復(fù)雜W及需 要增加大量編碼等缺點(diǎn)。
[000引為解決ODBC存在的缺陷,微軟推出了 DA0。DA0也稱為Jet數(shù)據(jù)庫(kù)引擎,是第一個(gè) 連接面向?qū)ο蟮臄?shù)據(jù)庫(kù)訪問(wèn)編程接口。由于Jet是第一個(gè)連接到Access的面向?qū)ο蠼涌冢?因此DA0可W通過(guò)Jet數(shù)據(jù)庫(kù)引擎直接訪問(wèn)Access數(shù)據(jù)庫(kù)。也可用于訪問(wèn)Microsoft Jet 數(shù)據(jù)庫(kù)、索引順序存取方法(ISAM, Indexed Sequential Access Method)數(shù)據(jù)庫(kù)W及ODBC 數(shù)據(jù)庫(kù)。采用DAO技術(shù)時(shí),所有請(qǐng)求和數(shù)據(jù)處理都必須經(jīng)過(guò)Jet引擎,送在很大程度上降低 了對(duì)ODBC數(shù)據(jù)源的存取速度,但是它卻非常適合訪問(wèn)Jet型數(shù)據(jù)庫(kù)。
[000引隨后,針對(duì)DA0訪問(wèn)ODBC數(shù)據(jù)源性能不佳推出畑0,畑0是基于ODBC API的一個(gè) 面向?qū)ο蟮慕涌?,可視為ODBC API的抽象。該技術(shù)必須通過(guò)現(xiàn)存的ODBC驅(qū)動(dòng)程序來(lái)訪問(wèn)關(guān) 系數(shù)據(jù)庫(kù)。由于它直接與ODBC API交互,能更快地獲取和管理數(shù)據(jù),并且能實(shí)現(xiàn)所有ODBC API擁有的底層功能和靈活性,但是不提供到Jet數(shù)據(jù)庫(kù)引擎的接口,不能訪問(wèn)Jet和ISAM 數(shù)據(jù)庫(kù)文件。
[0007] ADO是用于在.肥T平臺(tái)上實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)訪問(wèn)和操作的組件,訪問(wèn)的數(shù)據(jù)源不僅包 括關(guān)系型數(shù)據(jù)庫(kù)還包括非關(guān)系型數(shù)據(jù)庫(kù),是近年來(lái)使用最廣泛的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。ADO是 ActiveX數(shù)據(jù)訪問(wèn)對(duì)象的集合,是通過(guò)OLE DB提供的基于組件對(duì)象模型(COM)的訪問(wèn)技術(shù), 為訪問(wèn)對(duì)象連接與嵌入數(shù)據(jù)庫(kù)(OLE DB, Object Linking and Embedding Data Base),數(shù) 據(jù)源而設(shè)計(jì)的一種面向?qū)ο蟮膽?yīng)用程序?qū)咏涌?。它是?duì)ODBC、DAO、RDO H種數(shù)據(jù)庫(kù)訪問(wèn)方 式的擴(kuò)展,??跒殚_(kāi)發(fā)Client/Server應(yīng)用程序而設(shè)計(jì),其核必組件是Recordset數(shù)據(jù)訪問(wèn) 模式和OLE DB數(shù)據(jù)提供者。
[0008] W上介紹的數(shù)據(jù)訪問(wèn)模型都是永久連接,很容易耗盡服務(wù)器資源和導(dǎo)致系統(tǒng)的 性能瓶頸。為了克服連接訪問(wèn)模型的缺點(diǎn),引入了新的數(shù)據(jù)訪問(wèn)模型ADO.肥T。ADO.肥T 是一種連接、基于消息的數(shù)據(jù)訪問(wèn)模式,為分布式數(shù)據(jù)共享應(yīng)用程序提供開(kāi)發(fā)接口。它是 Microsoft在.肥T平臺(tái)上對(duì)數(shù)據(jù)存取的解決方案,在某種程度上代表了最新版本的ADO技 術(shù)。
[0009] 現(xiàn)有技術(shù)中的數(shù)據(jù)庫(kù)操作方法存在如下缺點(diǎn):直接使用現(xiàn)有數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),當(dāng) 需要更換底層數(shù)據(jù)庫(kù)時(shí),需要在整個(gè)軟件項(xiàng)目中搜索數(shù)據(jù)庫(kù)連接參數(shù)進(jìn)行修改,工作量大 且易出錯(cuò)。此外,直接使用現(xiàn)有數(shù)據(jù)庫(kù)技術(shù),要求開(kāi)發(fā)人員不但要熟悉業(yè)務(wù)層面的邏輯而且 要具備熟練拼寫結(jié)構(gòu)化查詢語(yǔ)言(S化,S化UC化red如ery Language)語(yǔ)句的能力,同時(shí),人 工拼寫S化語(yǔ)句經(jīng)常會(huì)帶來(lái)一些拼寫錯(cuò)誤,開(kāi)發(fā)人員不得不在代碼調(diào)試階段花費(fèi)時(shí)間查找 錯(cuò)誤,影響開(kāi)發(fā)效率。
【發(fā)明內(nèi)容】
[0010] 本申請(qǐng)?zhí)峁┝艘环N數(shù)據(jù)庫(kù)操作裝置及方法。
[0011] 本申請(qǐng)實(shí)施例提供了一種數(shù)據(jù)庫(kù)操作裝置,包括:數(shù)據(jù)庫(kù)操作模塊、數(shù)據(jù)庫(kù)映射模 塊W及數(shù)據(jù)庫(kù)連接模塊;
[0012] 數(shù)據(jù)庫(kù)映射模塊用于提供實(shí)體類,所述實(shí)體類與物理數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)表一一對(duì) 應(yīng),并且實(shí)體類中的每一個(gè)字段與數(shù)據(jù)庫(kù)中數(shù)據(jù)庫(kù)表的每一個(gè)字段也-對(duì)應(yīng);
[0013] 數(shù)據(jù)庫(kù)操作模塊用于提供數(shù)據(jù)庫(kù)的操作接口,根據(jù)來(lái)自外部的數(shù)據(jù)庫(kù)操作請(qǐng)求通 過(guò)所述實(shí)體類組裝成可執(zhí)行的結(jié)構(gòu)化查詢語(yǔ)言S化語(yǔ)句,將所述S化語(yǔ)句交由數(shù)據(jù)庫(kù)連接 模塊執(zhí)行,并將來(lái)自數(shù)據(jù)庫(kù)連接模塊的執(zhí)行結(jié)果返回給外部;
[0014] 數(shù)據(jù)庫(kù)連接模塊用于與物理數(shù)據(jù)庫(kù)建立連接、斷開(kāi)連接、執(zhí)行來(lái)自數(shù)據(jù)庫(kù)操作模 塊的S化語(yǔ)句,并將執(zhí)行結(jié)果返回給數(shù)據(jù)庫(kù)操作模塊。
[0015] 較佳地,所述數(shù)據(jù)庫(kù)操作模塊進(jìn)一步包括;單表操作單元,用于提供一個(gè)單表操作 父類,該單表操作父類將各個(gè)實(shí)體類公共的屬性和方法封裝起來(lái),針對(duì)單張數(shù)據(jù)庫(kù)表進(jìn)行 的通用的增、刪、改、查四類方法均包含在此父類中。
[0016] 較佳地,數(shù)據(jù)庫(kù)映射模塊中的各個(gè)實(shí)體類均繼承自所述單表操作父類。
[0017] 較佳地,所述數(shù)據(jù)庫(kù)操作模塊進(jìn)一步包括:
[0018] 多表操作單元,用于根據(jù)業(yè)務(wù)邏輯組裝出與多張數(shù)據(jù)庫(kù)表有關(guān)的S化語(yǔ)句。
[0019] 較佳地,所述數(shù)據(jù)庫(kù)連接模塊進(jìn)一步包括:
[0020] 數(shù)據(jù)庫(kù)連接類單元,用于提供與特定類型的物理數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接類,所 述數(shù)據(jù)庫(kù)連接類用于與對(duì)應(yīng)類型的物理數(shù)據(jù)庫(kù)建立連接、斷開(kāi)連接,W及執(zhí)行S化語(yǔ)句。
[0021] 較佳地,所述數(shù)據(jù)庫(kù)連接模塊進(jìn)一步包括:
[0022] 連接類管理單元,用于增加新的數(shù)據(jù)庫(kù)連接類單元,或刪除已有的數(shù)據(jù)庫(kù)連接類 單元。
[0023] 本申請(qǐng)實(shí)施例還提供了一種數(shù)據(jù)庫(kù)操作方法,包括如下步驟:
[0024] A、生成與物理數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)表一一對(duì)應(yīng)的實(shí)體類,所述實(shí)體類中的每一個(gè)字 段與數(shù)據(jù)庫(kù)中數(shù)據(jù)庫(kù)表的每一個(gè)字段也一一對(duì)應(yīng);
[0025] B、根據(jù)來(lái)自外部的數(shù)據(jù)庫(kù)操作請(qǐng)求通過(guò)所述實(shí)體類組裝成可執(zhí)行的結(jié)構(gòu)化查詢 語(yǔ)目S化語(yǔ)句;
[0026] C、與物理數(shù)據(jù)庫(kù)建立連接、執(zhí)行所述S化語(yǔ)句,并將執(zhí)行結(jié)果返回外部;
[0027] D、斷開(kāi)與物理數(shù)據(jù)庫(kù)的連接。
[0028] 較佳地,步驟B包括:
[0029] 調(diào)用單表操作父類及所述實(shí)體類,組裝成針對(duì)單張數(shù)據(jù)庫(kù)表進(jìn)行的增、刪、改、查 的S化語(yǔ)句;所述實(shí)體類均繼承自所述單表操作父類。
[0030] 較佳地,步驟B包括:
[0031] 根據(jù)業(yè)務(wù)邏輯組裝出與多張數(shù)據(jù)庫(kù)表有關(guān)的S化語(yǔ)句。
[0032] 較佳地,所述步驟C所述與物理數(shù)據(jù)庫(kù)建立連接、執(zhí)行所述S化語(yǔ)句為:通過(guò)與物 理數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接類與所述物理數(shù)據(jù)庫(kù)建立連接,執(zhí)行S化語(yǔ)句。
[0033] 較佳地,該方法進(jìn)一步包括:增加新的數(shù)據(jù)庫(kù)連接類,或刪除已有的數(shù)據(jù)庫(kù)連接 類。
[0034] 從W上技術(shù)方案可W看出,數(shù)據(jù)庫(kù)映射模塊提供的實(shí)體類與數(shù)據(jù)庫(kù)表有一一對(duì)應(yīng) 的映射關(guān)系,實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一封裝;數(shù)據(jù)庫(kù)連接模塊主要負(fù)責(zé)與物理數(shù)據(jù)庫(kù)建立連接、斷開(kāi) 連接、執(zhí)行S化語(yǔ)句,當(dāng)目前的數(shù)據(jù)庫(kù)不能滿足需求或其他原因需要改變數(shù)據(jù)庫(kù)系統(tǒng)時(shí),只 要在數(shù)據(jù)庫(kù)連接模塊中增加一個(gè)對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接類即可,不需要改動(dòng)其他模塊,工作量 很少;此外,數(shù)據(jù)庫(kù)操作模塊提供對(duì)單張數(shù)據(jù)庫(kù)表的通用增刪改查方法,在送些方法中完成 S化語(yǔ)句的自動(dòng)拼接,減少人工拼寫的錯(cuò)誤,提高開(kāi)發(fā)效率。
【附圖說(shuō)明】
[0035] 圖1為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)操作裝置框圖;
[0036] 圖2為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)操作方法流程示意圖;
[0037] 圖3為本申請(qǐng)實(shí)施例中數(shù)據(jù)庫(kù)連接父類和子類的關(guān)系類圖。
【具體實(shí)施方式】
[0038] 為使本申請(qǐng)技術(shù)方案的技術(shù)原理、特點(diǎn)W及技術(shù)效果更加清楚,W下結(jié)合具體實(shí) 施例對(duì)本申請(qǐng)技術(shù)方案進(jìn)行詳細(xì)闡述。
[0039] 圖1為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)操作裝置框圖。數(shù)據(jù)庫(kù)操作裝置提供數(shù)據(jù)庫(kù)的 統(tǒng)一的訪問(wèn)接口,所有對(duì)數(shù)據(jù)庫(kù)進(jìn)行的增加、刪除、修改、查詢操作都在數(shù)據(jù)庫(kù)操作裝置中 進(jìn)行統(tǒng)一管理和處理。數(shù)據(jù)庫(kù)操作裝置主要包括數(shù)據(jù)庫(kù)操作模塊102、數(shù)據(jù)庫(kù)映射模塊103 W及數(shù)據(jù)庫(kù)連接模塊104。
[0040] 數(shù)據(jù)庫(kù)操作模塊102提供數(shù)據(jù)庫(kù)的實(shí)際操作接口,也是系統(tǒng)外部對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的 通道。該模塊主要實(shí)現(xiàn)的功能是根據(jù)外部模塊101的數(shù)據(jù)庫(kù)操作請(qǐng)求通過(guò)所述實(shí)體類組裝 成最終可執(zhí)行的S化語(yǔ)句,將所述S化語(yǔ)句交由數(shù)據(jù)庫(kù)連接模塊104進(jìn)行最終執(zhí)行,并將執(zhí) 行結(jié)果返回給外部模塊101。
[0041] 數(shù)據(jù)庫(kù)操作模塊102進(jìn)一步包括;單表操作單元1021,用于提供一個(gè)單表操作父 類,該單表操作父類將各個(gè)實(shí)體類公共的屬性和方法封裝起來(lái),針對(duì)單張數(shù)據(jù)庫(kù)表進(jìn)行的 通用的增、刪、改、查四類方法均包含在此父類中。數(shù)據(jù)庫(kù)映射模塊103中的各個(gè)數(shù)據(jù)庫(kù)表 對(duì)應(yīng)的實(shí)體類均繼承自該單表操作父類。
[0042] 數(shù)據(jù)庫(kù)操作模塊102還可W進(jìn)一步包括;多表操作單元1022,用于根據(jù)業(yè)務(wù)邏輯 組裝出與多張數(shù)據(jù)庫(kù)表有關(guān)的S化語(yǔ)句。
[0043] 數(shù)據(jù)庫(kù)連接模塊104負(fù)責(zé)與物理數(shù)據(jù)庫(kù)105建立連接、斷開(kāi)連接、執(zhí)行最終的SQL 語(yǔ)句。將數(shù)據(jù)庫(kù)連接類單元1041封裝在該模塊中是為了系統(tǒng)能夠快速適應(yīng)不同的物理數(shù) 據(jù)庫(kù),當(dāng)目前的數(shù)據(jù)庫(kù)不能滿足需求或其他原因需要改變數(shù)據(jù)庫(kù)系統(tǒng)時(shí),通過(guò)連接類管理 單元1042在數(shù)據(jù)庫(kù)連接模塊104中增加一個(gè)對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接類1041即可,不需要改動(dòng) 該裝置中的其他模塊。
[0044] 數(shù)據(jù)庫(kù)映射模塊103提供數(shù)據(jù)庫(kù)表的實(shí)體映射類,該模塊中的實(shí)體類(實(shí)體類1、 實(shí)體類2……)與物理數(shù)據(jù)庫(kù)105中的數(shù)據(jù)庫(kù)表(表1、表2……)一一對(duì)應(yīng),并且實(shí)體類中 的每一個(gè)字段與物理數(shù)據(jù)庫(kù)105中數(shù)據(jù)庫(kù)表的每一個(gè)字段也一一對(duì)應(yīng)。數(shù)據(jù)庫(kù)映射模塊 103提供的實(shí)體類對(duì)各自的數(shù)據(jù)進(jìn)行封裝,為外部模塊101提供了數(shù)據(jù)庫(kù)表映射,外部模塊 101通過(guò)實(shí)體類來(lái)調(diào)用數(shù)據(jù)庫(kù)操作模塊中的單表操作或多表操作。
[0045] 圖2為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)操作方法流程,包括如下步驟:
[0046] 步驟201 ;在數(shù)據(jù)庫(kù)映射模塊103中,生成數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類。
[0047] 通過(guò)代碼生成器,對(duì)物理數(shù)據(jù)庫(kù)205中的每一張數(shù)據(jù)庫(kù)表生成一個(gè)對(duì)應(yīng)的實(shí)體 類,實(shí)體類名與物理數(shù)據(jù)庫(kù)105中的