本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體而言,涉及一種數(shù)據(jù)庫(kù)兼容方法。
背景技術(shù):
為了滿足不同企業(yè)的要求,在應(yīng)用程序軟件設(shè)計(jì)時(shí)需要兼顧數(shù)據(jù)庫(kù)的兼容性和可移植性。由于不同數(shù)據(jù)庫(kù)中內(nèi)置存儲(chǔ)函數(shù)、系統(tǒng)表和SQL語(yǔ)法等的不同,為了滿足業(yè)務(wù)需求,很多應(yīng)用程序需要開(kāi)發(fā)多套數(shù)據(jù)操縱語(yǔ)言,這使得應(yīng)用程序開(kāi)發(fā)的效率、可維護(hù)性和兼容性降低。
現(xiàn)有技術(shù)中提供的方法支持的數(shù)據(jù)庫(kù)和存儲(chǔ)函數(shù)很少,并且由于各數(shù)據(jù)庫(kù)中均存在內(nèi)置存儲(chǔ)函數(shù),因而現(xiàn)有技術(shù)的解決方案依然不能解決數(shù)據(jù)庫(kù)通用性和兼容性差的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
為了克服現(xiàn)有技術(shù)中的上述不足,本發(fā)明目的在于提供一種數(shù)據(jù)庫(kù)兼容方法,其能夠解決現(xiàn)有技術(shù)中需要根據(jù)不同數(shù)據(jù)庫(kù)的不同存儲(chǔ)函數(shù)而開(kāi)發(fā)多套數(shù)據(jù)操縱語(yǔ)言的技術(shù)問(wèn)題,提高了應(yīng)用程序的開(kāi)發(fā)效率和兼容性。
為了實(shí)現(xiàn)上述目的,本發(fā)明較佳實(shí)施例采用的技術(shù)方案如下:
本發(fā)明較佳實(shí)施例提供一種數(shù)據(jù)庫(kù)兼容方法,應(yīng)用于計(jì)算機(jī)設(shè)備。所述計(jì)算機(jī)設(shè)備存儲(chǔ)有數(shù)據(jù)庫(kù)、通用存儲(chǔ)函數(shù)庫(kù)及數(shù)據(jù)庫(kù)類(lèi)型與所述通用存儲(chǔ)函數(shù)庫(kù)部署方式對(duì)應(yīng)關(guān)系。所述方法包括:
接收待兼容的數(shù)據(jù)庫(kù);
判定待兼容的數(shù)據(jù)庫(kù)類(lèi)型,所述數(shù)據(jù)庫(kù)類(lèi)型包括mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)、sqlserver數(shù)據(jù)庫(kù)、postgreSQL數(shù)據(jù)庫(kù)、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)數(shù)據(jù)庫(kù)、神通數(shù)據(jù)庫(kù)、derby數(shù)據(jù)庫(kù)或者sqlite數(shù)據(jù)庫(kù);
獲得與所述數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的部署方式及通用存儲(chǔ)函數(shù)庫(kù);
將所述通用存儲(chǔ)函數(shù)庫(kù)采用與所述數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的部署方式部署到所述待兼容的數(shù)據(jù)庫(kù)中。
在本發(fā)明較佳實(shí)施例中,所述方法還包括:
創(chuàng)建所述通用存儲(chǔ)函數(shù)庫(kù);
所述創(chuàng)建所述通用存儲(chǔ)函數(shù)庫(kù)的步驟包括:
獲取需要兼容的多個(gè)樣本數(shù)據(jù)庫(kù),每個(gè)樣本數(shù)據(jù)庫(kù)包括有內(nèi)置存儲(chǔ)函數(shù)集;
基于內(nèi)置存儲(chǔ)函數(shù)集中各內(nèi)置存儲(chǔ)函數(shù)實(shí)現(xiàn)的功能對(duì)所述內(nèi)置存儲(chǔ)函數(shù)進(jìn)行分類(lèi),得到不同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù);
將各樣本數(shù)據(jù)庫(kù)中相同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)進(jìn)行合并,得到實(shí)現(xiàn)同一功能的內(nèi)置存儲(chǔ)函數(shù)集;
將各個(gè)功能的內(nèi)置存儲(chǔ)函數(shù)集基于一預(yù)設(shè)種類(lèi)數(shù)據(jù)庫(kù)對(duì)應(yīng)的功能實(shí)現(xiàn)規(guī)則進(jìn)行處理,得到通用存儲(chǔ)函數(shù)庫(kù)。
在本發(fā)明較佳實(shí)施例中,所述創(chuàng)建所述通用存儲(chǔ)函數(shù)庫(kù)的步驟還包括:
獲取各個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的內(nèi)置存儲(chǔ)函數(shù);
將各個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的內(nèi)置存儲(chǔ)函數(shù)與所述通用存儲(chǔ)函數(shù)庫(kù)進(jìn)行對(duì)比,查找各個(gè)數(shù)據(jù)庫(kù)中不存在的存儲(chǔ)函數(shù),或者功能、格式與所述通用存儲(chǔ)函數(shù)庫(kù)不同的存儲(chǔ)函數(shù);
響應(yīng)對(duì)查找到的存儲(chǔ)函數(shù)進(jìn)行開(kāi)發(fā)的操作,將開(kāi)發(fā)后的所述存儲(chǔ)函數(shù)添加到所述通用存儲(chǔ)函數(shù)庫(kù)中。
在本發(fā)明較佳實(shí)施例中,所述基于內(nèi)置存儲(chǔ)函數(shù)集中各內(nèi)置存儲(chǔ)函數(shù)實(shí)現(xiàn)的功能對(duì)所述內(nèi)置存儲(chǔ)函數(shù)進(jìn)行分類(lèi),得到不同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)的步驟中:
所述不同類(lèi)別的函數(shù)包括:數(shù)學(xué)函數(shù)、字符串函數(shù)、日期與時(shí)間函數(shù)、判斷函數(shù)、聚合函數(shù)、加解密函數(shù)或轉(zhuǎn)換函數(shù)中的至少一種及多種的自由組合。
在本發(fā)明較佳實(shí)施例中,所述將各樣本數(shù)據(jù)庫(kù)中相同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)進(jìn)行合并,得到實(shí)現(xiàn)同一功能的內(nèi)置存儲(chǔ)函數(shù)集的步驟包括:
將各個(gè)數(shù)據(jù)庫(kù)中相同類(lèi)別內(nèi)置存儲(chǔ)函數(shù)的名字、參數(shù)、參數(shù)類(lèi)型和返回值類(lèi)型進(jìn)行整合,得到實(shí)現(xiàn)同一功能的內(nèi)置存儲(chǔ)函數(shù)集。
在本發(fā)明較佳實(shí)施例中,所述將各個(gè)功能的內(nèi)置存儲(chǔ)函數(shù)集基于一預(yù)設(shè)種類(lèi)數(shù)據(jù)庫(kù)對(duì)應(yīng)的功能實(shí)現(xiàn)規(guī)則進(jìn)行處理,得到該預(yù)設(shè)種類(lèi)數(shù)據(jù)庫(kù)的通用存儲(chǔ)函數(shù)庫(kù)的步驟包括:
確定通用存儲(chǔ)函數(shù)庫(kù)的名字;
確定通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型及返回值類(lèi)型;
根據(jù)所述通用存儲(chǔ)函數(shù)庫(kù)的名字、所述通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型及返回值類(lèi)型確定所述通用存儲(chǔ)函數(shù)庫(kù)。
在本發(fā)明較佳實(shí)施例中,所述確定通用存儲(chǔ)函數(shù)庫(kù)的名字的方式包括:
根據(jù)各個(gè)數(shù)據(jù)庫(kù)中的內(nèi)置存儲(chǔ)函數(shù)的功能和/或格式確定通用存儲(chǔ)函數(shù)庫(kù)的名字。
在本發(fā)明較佳實(shí)施例中,所述根據(jù)各個(gè)數(shù)據(jù)庫(kù)中的內(nèi)置存儲(chǔ)函數(shù)的功能和/或格式確定通用存儲(chǔ)函數(shù)庫(kù)的名字的步驟包括:
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中同一內(nèi)置存儲(chǔ)函數(shù)的功能與格式相同時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)的名字不變;
當(dāng)一部分?jǐn)?shù)據(jù)庫(kù)中同一內(nèi)置存儲(chǔ)函數(shù)功能與格式相同,另一部分?jǐn)?shù)據(jù)庫(kù)中不存在所述內(nèi)置存儲(chǔ)函數(shù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)的名字與所述內(nèi)置存儲(chǔ)函數(shù)的名字相同;
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中存在同一內(nèi)置存儲(chǔ)函數(shù),但是所述內(nèi)置存儲(chǔ)函數(shù)的功能或格式不同時(shí),重新定義所述通用存儲(chǔ)函數(shù)庫(kù)名字;
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中的不同內(nèi)置存儲(chǔ)函數(shù)功能相同時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)名字按照通用格式定義;
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中不存在同一功能的內(nèi)置存儲(chǔ)函數(shù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)為數(shù)據(jù)庫(kù)的關(guān)鍵字或保留字之外的任意自定義名字。
在本發(fā)明較佳實(shí)施例中,所述確定通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型及返回值類(lèi)型的步驟包括:
響應(yīng)基于預(yù)設(shè)數(shù)據(jù)庫(kù)對(duì)通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型和返回值類(lèi)型進(jìn)行設(shè)計(jì)的操作;
根據(jù)確定的通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型和返回值類(lèi)型,通過(guò)通用類(lèi)型轉(zhuǎn)換函數(shù)對(duì)未經(jīng)過(guò)設(shè)計(jì)的參數(shù)類(lèi)型和返回值類(lèi)型進(jìn)行轉(zhuǎn)換。
在本發(fā)明較佳實(shí)施例中,所述將所述通用存儲(chǔ)函數(shù)庫(kù)采用與所述數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的部署方式部署到所述待兼容的數(shù)據(jù)庫(kù)中的步驟包括:
通過(guò)所述通用存儲(chǔ)函數(shù)庫(kù)的配置文件獲取所述待兼容的數(shù)據(jù)庫(kù)類(lèi)型,執(zhí)行與所述數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的腳本將所述通用存儲(chǔ)函數(shù)庫(kù)應(yīng)用到所述數(shù)據(jù)庫(kù)中。其中,所述配置文件包括用于配置連接數(shù)據(jù)庫(kù)所需的數(shù)據(jù)庫(kù)連接參數(shù)信息,所述參數(shù)信息包括url、driverClassName、username以及password;
當(dāng)所述數(shù)據(jù)庫(kù)為mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)、sqlserver數(shù)據(jù)庫(kù)、postgreSQL數(shù)據(jù)庫(kù)、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)數(shù)據(jù)庫(kù)或神通數(shù)據(jù)庫(kù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)以sql腳本的形式執(zhí)行到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中;
當(dāng)所述數(shù)據(jù)庫(kù)類(lèi)型為derby數(shù)據(jù)庫(kù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)在所述數(shù)據(jù)庫(kù)中為jar包和sql腳本,則引入所述jar包,并將所述sql腳本執(zhí)行到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中;
當(dāng)所述數(shù)據(jù)庫(kù)類(lèi)型為sqlite數(shù)據(jù)庫(kù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)在所述數(shù)據(jù)庫(kù)中為編譯后的庫(kù)文件,通過(guò)引用所述庫(kù)文件執(zhí)行到對(duì)應(yīng)的應(yīng)用程序中。
相對(duì)于現(xiàn)有技術(shù)而言,本發(fā)明具有以下有益效果:
本發(fā)明提供的數(shù)據(jù)庫(kù)兼容方法,通過(guò)對(duì)所述通用存儲(chǔ)函數(shù)庫(kù)的開(kāi)發(fā),只需要完成一套數(shù)據(jù)操縱語(yǔ)言就可以兼容不同的數(shù)據(jù)庫(kù)環(huán)境,提高了應(yīng)用程序的開(kāi)發(fā)效率和兼容性。即使在業(yè)務(wù)邏輯比較復(fù)雜,需要添加新的通用存儲(chǔ)函數(shù)庫(kù)時(shí),只需要在各數(shù)據(jù)庫(kù)中添加所述通用存儲(chǔ)函數(shù)庫(kù)即可,具有良好的擴(kuò)展性。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1為本發(fā)明較佳實(shí)施例提供的計(jì)算機(jī)設(shè)備的結(jié)構(gòu)框圖;
圖2為本發(fā)明較佳實(shí)施例提供的數(shù)據(jù)庫(kù)兼容方法的一種流程示意圖;
圖3為本發(fā)明較佳實(shí)施例提供的數(shù)據(jù)庫(kù)兼容方法的另一種流程示意圖;
圖4為圖3中步驟S209包括的子步驟的一種流程示意圖;
圖5為圖4中子步驟S2094包括的子步驟的流程示意圖;
圖6為圖3中步驟S209包括的子步驟的另一種流程示意圖。
圖標(biāo):100-計(jì)算機(jī)設(shè)備;110-存儲(chǔ)器;120-處理器;130-存儲(chǔ)控制器。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來(lái)布置和設(shè)計(jì)。因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類(lèi)似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。同時(shí),在本發(fā)明的描述中,術(shù)語(yǔ)“第一”、“第二”等僅用于區(qū)分描述,而不能理解為指示或暗示相對(duì)重要性。
下面結(jié)合附圖,對(duì)本發(fā)明的一些實(shí)施方式作詳細(xì)說(shuō)明。在不沖突的情況下,下述的實(shí)施例及實(shí)施例中的特征可以相互組合。
請(qǐng)參照?qǐng)D1,圖1是本發(fā)明較佳實(shí)施例提供的計(jì)算機(jī)設(shè)備100的結(jié)構(gòu)框圖。本發(fā)明實(shí)施例中的計(jì)算機(jī)設(shè)備100可以為用于實(shí)現(xiàn)本發(fā)明實(shí)施例的數(shù)據(jù)處理和存儲(chǔ)的任意設(shè)備(例如,個(gè)人電腦(Personal Computer,PC))。
所述計(jì)算機(jī)設(shè)備100包括存儲(chǔ)器110、處理器120及存儲(chǔ)控制器130。其中,所述存儲(chǔ)器110中存儲(chǔ)有數(shù)據(jù)庫(kù)、通用存儲(chǔ)函數(shù)庫(kù)及數(shù)據(jù)庫(kù)類(lèi)型與所述通用存儲(chǔ)函數(shù)庫(kù)部署方式對(duì)應(yīng)關(guān)系。在本實(shí)施例中,所述數(shù)據(jù)庫(kù)類(lèi)型包括,但不限于mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)、sqlserver數(shù)據(jù)庫(kù)、postgreSQL數(shù)據(jù)庫(kù)、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)數(shù)據(jù)庫(kù)、神通數(shù)據(jù)庫(kù)、derby數(shù)據(jù)庫(kù)或者sqlite數(shù)據(jù)庫(kù)。
所述存儲(chǔ)器110、處理器120及存儲(chǔ)控制器130相互之間直接或間接地電性連接,以實(shí)現(xiàn)數(shù)據(jù)的傳輸或交互。例如,這些元件相互之間可通過(guò)一條或多條通訊總線或信號(hào)線實(shí)現(xiàn)電性連接。
其中,所述存儲(chǔ)器110可以是,但不限于,隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM),只讀存儲(chǔ)器(Read Only Memory,ROM),可編程只讀存儲(chǔ)器(Programmable Read-Only Memory,PROM),可擦除只讀存儲(chǔ)器(Erasable Programmable Read-Only Memory,EPROM),電可擦除只讀存儲(chǔ)器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存儲(chǔ)器110用于存儲(chǔ)程序,所述處理器120在接收到執(zhí)行指令后,執(zhí)行所述程序。進(jìn)一步地,上述存儲(chǔ)器110內(nèi)的軟件程序以及模塊還可包括操作系統(tǒng),其可包括各種用于管理系統(tǒng)任務(wù)(例如內(nèi)存管理、存儲(chǔ)設(shè)備控制、電源管理等)的軟件組件和/或驅(qū)動(dòng),并可與各種硬件或軟件組件相互通訊,從而提供其他軟件組件的運(yùn)行環(huán)境。
所述處理器120可能是一種集成電路芯片,具有信號(hào)的處理能力。上述的處理器120可以是通用處理器,包括中央處理器(Central Processing Unit,CPU)、網(wǎng)絡(luò)處理器(Network Processor,NP)等。還可以是數(shù)字信號(hào)處理器(DSP))、專(zhuān)用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)或者其他可編程邏輯器件、分立門(mén)或者晶體管邏輯器件、分立硬件組件??梢詫?shí)現(xiàn)或者執(zhí)行本發(fā)明實(shí)施例中的公開(kāi)的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)處理器等。
可以理解,圖1所述的結(jié)構(gòu)僅為示意,所述計(jì)算機(jī)設(shè)備100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。圖1中所示的各組件可以采用硬件、軟件或其組合實(shí)現(xiàn)。
請(qǐng)參閱圖2,圖2為本發(fā)明較佳實(shí)施例提供的數(shù)據(jù)庫(kù)兼容方法的流程示意圖。所述方法的具體流程如下:
步驟S210,接收待兼容的數(shù)據(jù)庫(kù)。
所述待兼容的數(shù)據(jù)庫(kù)可以是開(kāi)發(fā)應(yīng)用程序中需要兼容的任意數(shù)據(jù)庫(kù)。在本實(shí)施例的一種實(shí)施方式中,所述待兼容的數(shù)據(jù)庫(kù)中的內(nèi)置存儲(chǔ)函數(shù)未通過(guò)通用存儲(chǔ)函數(shù)庫(kù)兼容。
請(qǐng)參閱圖3,所述數(shù)據(jù)庫(kù)兼容方法還包括:
步驟S209,創(chuàng)建通用存儲(chǔ)函數(shù)庫(kù)。
所述通用存儲(chǔ)函數(shù)庫(kù)用于在不同數(shù)據(jù)庫(kù)中提供功能和格式相同的通用存儲(chǔ)函數(shù)庫(kù)。
具體地,請(qǐng)參閱圖4,所述步驟S209包括子步驟S2091、子步驟S2092、子步驟S2093、子步驟S2094。所述步驟S209包括的子步驟的具體流程如下:
子步驟S2091,獲取需要兼容的多個(gè)樣本數(shù)據(jù)庫(kù),每個(gè)樣本數(shù)據(jù)庫(kù)包括有內(nèi)置存儲(chǔ)函數(shù)集。
在本實(shí)施例中,所述計(jì)算機(jī)設(shè)備100響應(yīng)獲取樣本數(shù)據(jù)庫(kù)的操作指令。所述樣本數(shù)據(jù)庫(kù)可以根據(jù)預(yù)開(kāi)發(fā)的應(yīng)用程序或者其它需要兼容的數(shù)據(jù)庫(kù)進(jìn)行確定,可以包括目前常用的數(shù)據(jù)庫(kù),例如,所述樣本數(shù)據(jù)庫(kù)可以包括mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)、sqlserver數(shù)據(jù)庫(kù)、postgreSQL數(shù)據(jù)庫(kù)、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)數(shù)據(jù)庫(kù)、神通數(shù)據(jù)庫(kù)、derby數(shù)據(jù)庫(kù)或者sqlite數(shù)據(jù)庫(kù)等。
所述每個(gè)樣本數(shù)據(jù)庫(kù)中都包括有存儲(chǔ)在所述樣本數(shù)據(jù)庫(kù)中供所有用戶(hù)程序調(diào)用的子程序。所述子程序可以執(zhí)行多個(gè)不同的功能,即為本發(fā)明實(shí)施例的內(nèi)置存儲(chǔ)函數(shù)集,所述內(nèi)置存儲(chǔ)函數(shù)集包括有多個(gè)不同功能的內(nèi)置存儲(chǔ)函數(shù)。
子步驟S2092,基于內(nèi)置存儲(chǔ)函數(shù)集中各內(nèi)置存儲(chǔ)函數(shù)實(shí)現(xiàn)的功能對(duì)所述內(nèi)置存儲(chǔ)函數(shù)進(jìn)行分類(lèi),得到不同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)。
具體地,根據(jù)所述內(nèi)置存儲(chǔ)函數(shù)實(shí)現(xiàn)的功能,可以將所述內(nèi)置存儲(chǔ)函數(shù)集中的各內(nèi)置函數(shù)分為數(shù)學(xué)函數(shù)、字符串函數(shù)、日期與時(shí)間函數(shù)、判斷函數(shù)、聚合函數(shù)、加解密函數(shù)、轉(zhuǎn)換函數(shù)或其它功能函數(shù),從而可以得到不同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)。
子步驟S2093,將各樣本數(shù)據(jù)庫(kù)中相同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)進(jìn)行合并,得到實(shí)現(xiàn)同一功能的內(nèi)置存儲(chǔ)函數(shù)集。
在本實(shí)施例中,相同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)(例如,數(shù)學(xué)函數(shù))由功能不同的一系列函數(shù)組成。通過(guò)對(duì)各個(gè)相同類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)進(jìn)行分析,得到每個(gè)類(lèi)別的內(nèi)置存儲(chǔ)函數(shù)實(shí)現(xiàn)的所有功能,按照功能的不同對(duì)所有數(shù)據(jù)庫(kù)中的內(nèi)置存儲(chǔ)函數(shù)進(jìn)行整理,得到各個(gè)實(shí)現(xiàn)同一功能的內(nèi)置存儲(chǔ)函數(shù)集。其中,整理的內(nèi)容包括內(nèi)置存儲(chǔ)函數(shù)的名字、參數(shù)、參數(shù)類(lèi)型以及返回值類(lèi)型。
子步驟S2094,將各個(gè)功能的內(nèi)置存儲(chǔ)函數(shù)集基于一預(yù)設(shè)種類(lèi)數(shù)據(jù)庫(kù)對(duì)應(yīng)的功能實(shí)現(xiàn)規(guī)則進(jìn)行處理,得到通用存儲(chǔ)函數(shù)庫(kù)。
在本實(shí)施例中,所述預(yù)設(shè)種類(lèi)數(shù)據(jù)庫(kù)可以采用mySQL數(shù)據(jù)庫(kù)。具體地,請(qǐng)參閱圖5,所述子步驟S2094包括子步驟S20941、子步驟S20942以及子步驟S20943。所述子步驟S2094包括的子步驟的具體流程如下:
子步驟S20941,確定通用存儲(chǔ)函數(shù)庫(kù)的名字。
具體地,通用存儲(chǔ)函數(shù)庫(kù)的名字可以根據(jù)各個(gè)數(shù)據(jù)庫(kù)中的內(nèi)置存儲(chǔ)函數(shù)的功能和/或格式來(lái)確定。具體確定方式如下:
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中同一內(nèi)置存儲(chǔ)函數(shù)的功能與格式相同時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)的名字不變。
當(dāng)一部分?jǐn)?shù)據(jù)庫(kù)中同一內(nèi)置存儲(chǔ)函數(shù)功能與格式相同,另一部分?jǐn)?shù)據(jù)庫(kù)中不存在所述內(nèi)置存儲(chǔ)函數(shù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)的名字與所述內(nèi)置存儲(chǔ)函數(shù)的名字相同。
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中存在同一內(nèi)置存儲(chǔ)函數(shù),但是所述內(nèi)置存儲(chǔ)函數(shù)的功能或格式不同時(shí),重新定義所述通用存儲(chǔ)函數(shù)庫(kù)名字。重新定義規(guī)則可以為在所述內(nèi)置存儲(chǔ)函數(shù)名字后添加“gfl”,或者其它通用的格式。
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中的不同內(nèi)置存儲(chǔ)函數(shù)功能相同時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)名字按照通用格式定義。定義規(guī)則可以為mySQL中內(nèi)置存儲(chǔ)函數(shù)名字后添加“gfl”,或者其它通用的格式。
當(dāng)各個(gè)數(shù)據(jù)庫(kù)中不存在同一功能的內(nèi)置存儲(chǔ)函數(shù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)為數(shù)據(jù)庫(kù)的關(guān)鍵字或保留字之外的任意自定義名字,即所述任意自定義名字中不可以為數(shù)據(jù)庫(kù)的關(guān)鍵字或保留字。
子步驟S20942,確定通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型及返回值類(lèi)型。
具體地,在本實(shí)施例中,所述計(jì)算機(jī)設(shè)備100相應(yīng)基于所述預(yù)設(shè)數(shù)據(jù)庫(kù)對(duì)通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型和返回值類(lèi)型進(jìn)行設(shè)計(jì)的操作。所述預(yù)設(shè)數(shù)據(jù)庫(kù)可以采用數(shù)據(jù)類(lèi)型要求嚴(yán)格的數(shù)據(jù)庫(kù),例如,所述預(yù)設(shè)數(shù)據(jù)庫(kù)可以是derby數(shù)據(jù)庫(kù)。根據(jù)所述預(yù)設(shè)數(shù)據(jù)庫(kù)確定的通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型和返回值類(lèi)型,通過(guò)通用類(lèi)型轉(zhuǎn)換函數(shù)對(duì)未經(jīng)過(guò)設(shè)計(jì)的其它內(nèi)置存儲(chǔ)函數(shù)的參數(shù)類(lèi)型和返回值進(jìn)行轉(zhuǎn)換。
具體地,所述數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)包括字符串轉(zhuǎn)換成數(shù)字(to_number)函數(shù)、數(shù)字轉(zhuǎn)換成字符串(to_char)函數(shù)、日期轉(zhuǎn)換成時(shí)間戳(date_to_timestamp)函數(shù)、時(shí)間戳轉(zhuǎn)換成日期(timestamp_to_date)函數(shù)、日期轉(zhuǎn)換成字符串(dateformat_gfl)函數(shù)、字符串轉(zhuǎn)換成日期(date_gfl)函數(shù)。
通過(guò)上述設(shè)計(jì),所述通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型和返回值類(lèi)型可以進(jìn)行確定。
子步驟S20943,根據(jù)所述通用存儲(chǔ)函數(shù)庫(kù)的名字、所述通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型及返回值類(lèi)型確定所述通用存儲(chǔ)函數(shù)庫(kù)。
通過(guò)對(duì)所述通用存儲(chǔ)函數(shù)庫(kù)的名字的確定以及對(duì)所述通用存儲(chǔ)函數(shù)庫(kù)的參數(shù)類(lèi)型及返回值類(lèi)型的確定可以得到基于一預(yù)設(shè)種類(lèi)數(shù)據(jù)庫(kù)看的通用存儲(chǔ)函數(shù)庫(kù)。
請(qǐng)參閱圖6,所述步驟S209還包括子步驟S2095、子步驟S2096及子步驟S2097。所述子步驟的具體流程如下:
子步驟S2095,獲取各個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的內(nèi)置存儲(chǔ)函數(shù)。
子步驟S2096,將各個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的內(nèi)置存儲(chǔ)函數(shù)與所述通用存儲(chǔ)函數(shù)庫(kù)進(jìn)行對(duì)比,查找各個(gè)數(shù)據(jù)庫(kù)中不存在的存儲(chǔ)函數(shù),或者功能、格式與所述通用存儲(chǔ)函數(shù)庫(kù)不同的存儲(chǔ)函數(shù)。
子步驟S2097,響應(yīng)對(duì)查找到的存儲(chǔ)函數(shù)進(jìn)行開(kāi)發(fā)的操作,將開(kāi)發(fā)后的所述存儲(chǔ)函數(shù)添加到所述通用存儲(chǔ)數(shù)據(jù)庫(kù)中。
在本實(shí)施例中,通過(guò)將各個(gè)數(shù)據(jù)庫(kù)中的內(nèi)置存儲(chǔ)函數(shù)與所述通用存儲(chǔ)函數(shù)庫(kù)進(jìn)行對(duì)比,在查找到各個(gè)數(shù)據(jù)庫(kù)中不存在的存儲(chǔ)函數(shù)時(shí)對(duì)該存儲(chǔ)函數(shù)進(jìn)行開(kāi)發(fā),并添加到該存儲(chǔ)函數(shù)對(duì)應(yīng)數(shù)據(jù)庫(kù)中的對(duì)應(yīng)的功能的內(nèi)置存儲(chǔ)函數(shù)集中,實(shí)現(xiàn)了通用存儲(chǔ)函數(shù)庫(kù)對(duì)各個(gè)數(shù)據(jù)庫(kù)的兼容。
請(qǐng)?jiān)俅螀㈤唸D2,步驟S220,判定待兼容的數(shù)據(jù)庫(kù)類(lèi)型。
具體地,在本實(shí)施例中,所述數(shù)據(jù)庫(kù)類(lèi)型可以是,但不限于mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)、sqlserver數(shù)據(jù)庫(kù)、postgreSQL數(shù)據(jù)庫(kù)、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)數(shù)據(jù)庫(kù)、神通數(shù)據(jù)庫(kù)、derby數(shù)據(jù)庫(kù)或者sqlite數(shù)據(jù)庫(kù)等。根據(jù)所述通用存儲(chǔ)函數(shù)庫(kù)的配置文件判斷所述待兼容的數(shù)據(jù)庫(kù)環(huán)境。所述配置文件為用于配置所述通用存儲(chǔ)函數(shù)庫(kù)連接所述待兼容的數(shù)據(jù)庫(kù)所需要的參數(shù)信息,具體地,所述參數(shù)信息可以是java數(shù)據(jù)庫(kù)連接參數(shù)信息。其中,所述參數(shù)信息包括url、driverClassName、username以及password。
所述url指定擬連接的待兼容的數(shù)據(jù)庫(kù)的ip地址、端口、數(shù)據(jù)庫(kù)實(shí)例名稱(chēng)等信息。
所述DriverClassName為待兼容數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的名字。
所述username和password分別為待兼容數(shù)據(jù)庫(kù)用戶(hù)及該用戶(hù)對(duì)應(yīng)的密碼。
步驟S230,獲取與所述數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的部署方式及通用存儲(chǔ)函數(shù)庫(kù)。
具體地,由于通用存儲(chǔ)函數(shù)庫(kù)在不同種類(lèi)的數(shù)據(jù)庫(kù)中各不相同,在將所述通用存儲(chǔ)函數(shù)庫(kù)部署到數(shù)據(jù)庫(kù)時(shí)即有不同的部署方式,本實(shí)施例通過(guò)所述計(jì)算機(jī)設(shè)備100的存儲(chǔ)器110中存儲(chǔ)的上述通用存儲(chǔ)函數(shù)庫(kù)以及數(shù)據(jù)庫(kù)類(lèi)型與所述通用存儲(chǔ)函數(shù)庫(kù)部署方式對(duì)應(yīng)關(guān)系,獲取到所述待兼容的數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的部署方式。
步驟S240,將所述通用存儲(chǔ)函數(shù)庫(kù)采用與所述數(shù)據(jù)庫(kù)類(lèi)型對(duì)應(yīng)的部署方式部署到所述待兼容的數(shù)據(jù)庫(kù)中。
具體地,當(dāng)所述待兼容的數(shù)據(jù)庫(kù)為mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)、sqlserver數(shù)據(jù)庫(kù)、postgreSQL數(shù)據(jù)庫(kù)、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)數(shù)據(jù)庫(kù)或神通數(shù)據(jù)庫(kù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)以sql腳本的形式執(zhí)行到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中;
當(dāng)所述待兼容的數(shù)據(jù)庫(kù)類(lèi)型為derby數(shù)據(jù)庫(kù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)在所述數(shù)據(jù)庫(kù)中為jar包和sql腳本,則引入所述jar包,并將所述sql腳本執(zhí)行到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中;
當(dāng)所述待兼容的數(shù)據(jù)庫(kù)類(lèi)型為sqlite數(shù)據(jù)庫(kù)時(shí),所述通用存儲(chǔ)函數(shù)庫(kù)在所述數(shù)據(jù)庫(kù)中為編譯后的庫(kù)文件,通過(guò)引用所述庫(kù)文件執(zhí)行到對(duì)應(yīng)的應(yīng)用程序中。
綜上所述,本發(fā)明提供的數(shù)據(jù)庫(kù)兼容方法,通過(guò)對(duì)所述通用存儲(chǔ)函數(shù)庫(kù)的開(kāi)發(fā),只需要完成一套數(shù)據(jù)操縱語(yǔ)言就可以兼容不同的數(shù)據(jù)庫(kù)環(huán)境,提高了應(yīng)用程序的開(kāi)發(fā)效率和兼容性。即使在業(yè)務(wù)邏輯比較復(fù)雜,需要添加新的通用存儲(chǔ)函數(shù)庫(kù)時(shí),只需要在各數(shù)據(jù)庫(kù)中添加所述通用存儲(chǔ)函數(shù)庫(kù)即可,具有良好的擴(kuò)展性。
在本發(fā)明實(shí)施例所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的方法,也可以通過(guò)其它的方式實(shí)現(xiàn)。以上所描述的方法實(shí)施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)方式中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專(zhuān)用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專(zhuān)用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一起形成一個(gè)獨(dú)立的部分,也可以是各個(gè)模塊單獨(dú)存在,也可以?xún)蓚€(gè)或兩個(gè)以上模塊集成形成一個(gè)獨(dú)立的部分。
所述功能如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算設(shè)備(可以是個(gè)人計(jì)算機(jī),電子設(shè)備,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。
需要說(shuō)明的是,在本文中,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說(shuō)明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。