一種基于多數(shù)據(jù)庫(kù)類型的sql執(zhí)行方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法和 裝置。
【背景技術(shù)】
[0002] 在信息化應(yīng)用的軟件項(xiàng)目中,與數(shù)據(jù)庫(kù)交互是必不可少的內(nèi)容,數(shù)據(jù)庫(kù)管理系統(tǒng) 的類型多種多樣。客戶使用的時(shí)候一般是選擇這些數(shù)據(jù)庫(kù)系統(tǒng)中的一種,標(biāo)準(zhǔn)應(yīng)用軟件產(chǎn) 品一般都要支持多數(shù)據(jù)庫(kù)的應(yīng)用,這就要求在軟件設(shè)計(jì)和開發(fā)的時(shí)候要考慮支持多數(shù)據(jù)庫(kù) 應(yīng)用的情況,但不同的數(shù)據(jù)庫(kù)系統(tǒng)其語(yǔ)法結(jié)構(gòu)有所不同,從而造成開發(fā)人員在編碼的時(shí)候 要進(jìn)行大量的不同數(shù)據(jù)庫(kù)系統(tǒng)語(yǔ)法轉(zhuǎn)換的編寫。例如:假設(shè)要開發(fā)的軟件產(chǎn)品支持三種主 流數(shù)據(jù)庫(kù)的話,一條SQL語(yǔ)句要按三種不同的語(yǔ)法進(jìn)行執(zhí)行,就要分別寫三條不同語(yǔ)法的 SQL語(yǔ)句,此工作中包含大量的重復(fù)性工作,從而造在很大程序上影響的開發(fā)人員的編碼效 率。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明提供一種基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法和裝置,能夠提高編碼效率。
[0004] -種基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法,
[0005] 創(chuàng)建全局函數(shù)或者方法對(duì)象,設(shè)置入口參數(shù)包括對(duì)應(yīng)需要轉(zhuǎn)換的SQL語(yǔ)句的第一 參數(shù)和對(duì)應(yīng)目標(biāo)數(shù)據(jù)庫(kù)類型的第二參數(shù);以及設(shè)置輸出結(jié)果為轉(zhuǎn)換后的SQL語(yǔ)句;
[0006] 在所述全局函數(shù)或所述全局方法內(nèi),封裝從前置通用數(shù)據(jù)庫(kù)語(yǔ)法的SQL語(yǔ)句到其 他每一個(gè)目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句的轉(zhuǎn)換代碼;
[0007] 還包括:
[0008] 調(diào)用所述全局函數(shù)或所述全局方法,
[0009] 通過(guò)所述第一參數(shù),向所述全局函數(shù)或所述全局方法輸入符合所述前置通用數(shù)據(jù) 庫(kù)語(yǔ)法的當(dāng)前SQL語(yǔ)句;
[0010] 通過(guò)所述第二參數(shù),向所述全局函數(shù)或所述全局方法輸入當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型;
[0011] 執(zhí)行所述全局函數(shù)或所述全局方法,獲取所述全局函數(shù)或所述全局方法輸出的當(dāng) 前目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句。
[0012] 所述目標(biāo)數(shù)據(jù)庫(kù)類型包括:Oracle,Sybase,MySql,DB2數(shù)據(jù)庫(kù)中的任意一個(gè)或多 個(gè)。
[0013] 所述第二參數(shù)包括多個(gè)值,通過(guò)三位字符串表示不同的目標(biāo)數(shù)據(jù)庫(kù)類型;
[0014] 所述通過(guò)所述第二參數(shù),向所述全局函數(shù)或所述全局方法輸入當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類 型包括:在第二參數(shù)的三位字符串中分別攜帶多個(gè)當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型;
[0015] 所述獲取當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句包括:獲取所述全局函數(shù)或所述全 局方法分別輸出的對(duì)應(yīng)于多個(gè)當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的多個(gè)SQL語(yǔ)句。
[0016] 所述前置通用數(shù)據(jù)庫(kù)語(yǔ)法為:SQLSERVER語(yǔ)法。
[0017] 當(dāng)目標(biāo)數(shù)據(jù)庫(kù)類型包括ORACLE數(shù)據(jù)庫(kù)時(shí);
[0018] 所述封裝從前置通用數(shù)據(jù)庫(kù)語(yǔ)法的SQL語(yǔ)句到其他每一個(gè)目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法 的SQL語(yǔ)句的轉(zhuǎn)換代碼包括:用字符替換函數(shù)將SQLSERVER語(yǔ)法中判斷是否為空的函數(shù)名 稱"ISNULL"替換為ORACLE數(shù)據(jù)庫(kù)語(yǔ)法中的"NVL"。
[0019] 一種基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行裝置,包括:
[0020] 封裝單元,用于封裝有全局函數(shù)或者方法對(duì)象,該全局函數(shù)或者方法對(duì)象中封裝 有從前置通用數(shù)據(jù)庫(kù)語(yǔ)法的SQL語(yǔ)句到其他每一個(gè)目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句的轉(zhuǎn) 換代碼;該全局函數(shù)或者方法對(duì)象的入口參數(shù)包括對(duì)應(yīng)需要轉(zhuǎn)換的SQL語(yǔ)句的第一參數(shù)和 對(duì)應(yīng)目標(biāo)數(shù)據(jù)庫(kù)類型的第二參數(shù);該全局函數(shù)或者方法對(duì)象的輸出結(jié)果為轉(zhuǎn)換后的SQL語(yǔ) 句;
[0021] 交互單元,用于通過(guò)對(duì)所述第一參數(shù)的賦值,獲取向所述全局函數(shù)或所述全局方 法輸入的符合所述前置通用數(shù)據(jù)庫(kù)語(yǔ)法的當(dāng)前SQL語(yǔ)句;通過(guò)對(duì)所述第二參數(shù)的賦值,獲 取向所述全局函數(shù)或所述全局方法輸入的當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型;
[0022] 調(diào)用執(zhí)行單元,用于調(diào)用封裝單元中的所述全局函數(shù)或所述全局方法,根據(jù)所述 交互單元接收到的賦值,執(zhí)行所述全局函數(shù)或所述全局方法,獲取所述全局函數(shù)或所述全 局方法輸出的當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句。
[0023] 所述目標(biāo)數(shù)據(jù)庫(kù)類型包括:0racle,Sybase,MySql,DB2數(shù)據(jù)庫(kù)中的任意一個(gè)或多 個(gè)。
[0024] 所述封裝單元所封裝的全局函數(shù)或所述全局方法中,所述第二參數(shù)包括多個(gè)值, 通過(guò)三位字符串表示不同的目標(biāo)數(shù)據(jù)庫(kù)類型;
[0025] 所述交互單元,用于從對(duì)所述第二參數(shù)的賦值中,得到該第二參數(shù)的三位字符串 中分別攜帶的多個(gè)當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型;
[0026] 所述調(diào)用執(zhí)行單元,用于根據(jù)所述交互單元得到的多個(gè)當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型,獲 取所述全局函數(shù)或所述全局方法分別輸出的對(duì)應(yīng)于多個(gè)當(dāng)前目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的多個(gè) SQL語(yǔ)句。
[0027] 所述前置通用數(shù)據(jù)庫(kù)語(yǔ)法為:SQLSERVER語(yǔ)法。
[0028] 當(dāng)目標(biāo)數(shù)據(jù)庫(kù)類型包括ORACLE數(shù)據(jù)庫(kù)時(shí);
[0029] 所述封裝單元,用于封裝用字符替換函數(shù)將SQLSERVER語(yǔ)法中判斷是否為空的函 數(shù)名稱"ISNULL"替換為ORACLE數(shù)據(jù)庫(kù)語(yǔ)法中的"NVL"的轉(zhuǎn)換代碼。
[0030] 本發(fā)明實(shí)施例提供了一種基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法和裝置,規(guī)定所有用 戶都使用同一種前置通用數(shù)據(jù)庫(kù)語(yǔ)法,比如SQLSERVER語(yǔ)法,并且預(yù)先封裝好了從該前置 通用數(shù)據(jù)庫(kù)語(yǔ)法的SQL語(yǔ)句轉(zhuǎn)換到其他數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句的轉(zhuǎn)換代碼,這樣,用戶 或各種開發(fā)人員無(wú)需了解實(shí)際需要的多種多樣的目標(biāo)數(shù)據(jù)庫(kù)類型的語(yǔ)法,只需要懂得并輸 入一種前置通用數(shù)據(jù)庫(kù)語(yǔ)法的SQL語(yǔ)句即可,則可以自動(dòng)轉(zhuǎn)換為所需要的目標(biāo)數(shù)據(jù)庫(kù)類型 的語(yǔ)法的SQL語(yǔ)句,因此,大大提高了編碼的效率。
[0031] 本發(fā)明實(shí)施例在軟件開發(fā)領(lǐng)域有著廣泛的應(yīng)用前景,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行交互的軟件 開發(fā)中可極大的減少開發(fā)人員針對(duì)不同數(shù)據(jù)進(jìn)行SQL語(yǔ)法轉(zhuǎn)換的工作量。
【附圖說(shuō)明】
[0032] 圖1是本發(fā)明一個(gè)實(shí)施例提出的基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法的流程圖。
[0033] 圖2是本發(fā)明另一個(gè)實(shí)施例提出的基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法的流程圖。
[0034] 圖3是本發(fā)明一個(gè)實(shí)施例中基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0035] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述。顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本 發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí) 施例,都屬于本發(fā)明保護(hù)的范圍。
[0036] 本發(fā)明一個(gè)實(shí)施例提出了一種基于多數(shù)據(jù)庫(kù)類型的SQL執(zhí)行方法,參見圖1,包 括:
[0037] 步驟101 :創(chuàng)建全局函數(shù)或者方法對(duì)象,設(shè)置入口參數(shù)包括對(duì)應(yīng)需要轉(zhuǎn)換的SQL語(yǔ) 句的第一參數(shù)和對(duì)應(yīng)目標(biāo)數(shù)據(jù)庫(kù)類型的第二參數(shù);以及設(shè)置輸出結(jié)果為轉(zhuǎn)換后的SQL語(yǔ) 句;
[0038] 步驟102 :在所述全局函數(shù)或所述全局方法內(nèi),封裝從前置通用數(shù)據(jù)庫(kù)語(yǔ)法的SQL 語(yǔ)句到其他每一個(gè)目標(biāo)數(shù)據(jù)庫(kù)類型語(yǔ)法的SQL語(yǔ)句的轉(zhuǎn)換代碼;
[0039