數(shù)據(jù)庫建立系統(tǒng)、裝置和方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)庫建立系統(tǒng),運行于一編譯系統(tǒng)中用于執(zhí)行數(shù)據(jù)庫的編譯和訪問。該數(shù)據(jù)庫建立系統(tǒng)包括接收單元、判斷單元和翻譯單元。接收單元接收一通用的數(shù)據(jù)庫初始化SQL語句,判斷單元判斷目標數(shù)據(jù)庫類型,翻譯單元根據(jù)該數(shù)據(jù)庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據(jù)該數(shù)據(jù)庫初始化SQL語句和鍵值字符串生成在該目標數(shù)據(jù)庫中執(zhí)行的SQL語句。本發(fā)明還提供一種數(shù)據(jù)庫建立方法及裝置,利用本發(fā)明,針對數(shù)據(jù)庫數(shù)據(jù)初始化通用的一條SQL語句生成適應(yīng)各類型數(shù)據(jù)庫和語言的SQL語句,使得初始化SQL語句易維護,減少維護過程中出錯的風(fēng)險。
【專利說明】 數(shù)據(jù)庫建立系統(tǒng)、裝置和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,尤其涉及一種數(shù)據(jù)庫建立系統(tǒng)、裝置和方法。
【背景技術(shù)】
[0002]現(xiàn)有的數(shù)據(jù)庫產(chǎn)品在實現(xiàn)標準的SQL語法之外還支持各自特有的SQL語法,這些SQL語法都是不通用的。例如,在SQL SERVER中支持下面的語句:SELECT T0P100*FR0M t,但在DB2下由于不支持TOP關(guān)鍵字,所以該語句不能被正確編譯執(zhí)行而必須寫成等效的語句:SELECT*FR0M t FETCH FlRSTlOOROffS ONLY。可以看出,實現(xiàn)同樣的功能,即從表t中選擇頭100條記錄,在SQL SERVER與DB2中都是可以實現(xiàn)的,但實現(xiàn)的方式即提交的查詢語句卻并不相同。因此,工程師在進行數(shù)據(jù)庫系統(tǒng)開發(fā)時需要根據(jù)不同產(chǎn)品手工編寫多條SQL語句,這樣將給開發(fā)和維護帶來極大的不便,降低研發(fā)效率以及出錯風(fēng)險高。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的主要目的為提供一種數(shù)據(jù)庫建立系統(tǒng)、裝置和方法,基于通用SQL語句進行不同類型的數(shù)據(jù)庫的建立,從而在減少工程師手工編寫語句工作量的前提下提高開發(fā)維護效率。
[0004]本發(fā)明提供一種數(shù)據(jù)庫建立系統(tǒng),運行于一編譯系統(tǒng)中用于執(zhí)行數(shù)據(jù)庫的編譯和訪問,該數(shù)據(jù)庫建立系統(tǒng)包括:
[0005]接收單元,用于接收一通用的數(shù)據(jù)庫初始化SQL語句,
[0006]判斷單元,用于判斷目標數(shù)據(jù)庫類型,以及
[0007]翻譯單元,根據(jù)該數(shù)據(jù)庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據(jù)該數(shù)據(jù)庫初始化SQL語句和鍵值字符串生成在該目標數(shù)據(jù)庫中執(zhí)行的SQL語句。
[0008]進一步地,本發(fā)明還提供一種數(shù)據(jù)庫建立裝置,包括如上所述的數(shù)據(jù)庫建立系統(tǒng)。
[0009]進一步地,本發(fā)明還提供一種數(shù)據(jù)庫建立方法,該方法包括:
[0010]接收一通用的數(shù)據(jù)庫初始化SQL語句,
[0011]判斷目標數(shù)據(jù)庫類型,以及
[0012]根據(jù)該數(shù)據(jù)庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據(jù)確定的目標類型數(shù)據(jù)庫的SQL語法的差異生成適用于相應(yīng)類型數(shù)據(jù)庫的SQL語句。
[0013]本發(fā)明提供的一種數(shù)據(jù)庫建立系統(tǒng)、裝置和方法,針對數(shù)據(jù)庫數(shù)據(jù)初始化通用的一條SQL語句生成適應(yīng)各類型數(shù)據(jù)庫和語言的SQL語句,使得初始化SQL語句易維護,減少維護過程中出錯的風(fēng)險。
【專利附圖】
【附圖說明】
[0014]圖1為本發(fā)明實施方式中的數(shù)據(jù)庫建立系統(tǒng)的結(jié)構(gòu)示意圖;
[0015]圖2為本發(fā)明實施方式中的數(shù)據(jù)庫建立方法的流程圖;
[0016]圖3為本發(fā)明實施方式中的Derby數(shù)據(jù)庫建立方法的流程圖;[0017]圖4為本發(fā)明實施方式中的Pgsql數(shù)據(jù)庫建立方法的流程圖;
[0018]圖5為本發(fā)明實施方式中的Oracle數(shù)據(jù)庫建立方法的流程圖;
[0019]圖6為本發(fā)明實施方式中的Sybase數(shù)據(jù)庫建立方法的流程圖。
[0020]標號說明:
[0021]數(shù)據(jù)庫建立系統(tǒng)10
[0022]接收單元11
[0023]判斷單元12
[0024]翻譯單元13
[0025]解析模塊131
[0026]判斷模塊132
[0027]替換模塊133
【具體實施方式】[0028]為詳細說明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實現(xiàn)目的及效果,以下結(jié)合實施方式并配合附圖詳予說明。
[0029]結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,結(jié)構(gòu)化查詢語言是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng);同時也是數(shù)據(jù)庫腳本文件的擴展名。
[0030]在現(xiàn)有技術(shù)中,常見的數(shù)據(jù)庫類型通常有Derby、Pgsql、Oracle以及Sybase,以下將對每種數(shù)據(jù)庫進行簡單介紹。
[0031]Derby是一個完全用java編寫的數(shù)據(jù)庫,為Open source產(chǎn)品,基于ApacheLicense2.0分發(fā)。Derby非常小巧,核心部分derby, jar只有2M,所以既可以做為單獨的數(shù)據(jù)庫服務(wù)器使用,也可以內(nèi)嵌在應(yīng)用程序中使用。
[0032]Pgsql,對象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是世界上可以獲得的最先進的開放源碼的數(shù)據(jù)庫系統(tǒng),提供了多版本并行控制,支持幾乎所有SQL構(gòu)件(包括子查詢,事務(wù)和用戶定義類型和函數(shù)),并且可以獲得非常廣闊范圍的(開發(fā))語言綁定(包括C,C++,Java,peri,tcl,和python),支持大部分SQL標準并且提供了許多其他現(xiàn)代特性,例如,復(fù)雜查詢外鍵觸發(fā)器視圖事務(wù)完整性、多版本并發(fā)控制。
[0033]Oracle數(shù)據(jù)庫系統(tǒng)是美國ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一。ORACLE數(shù)據(jù)庫作為一個通用的數(shù)據(jù)庫系統(tǒng),具有完整的數(shù)據(jù)管理功能;作為一個關(guān)系數(shù)據(jù)庫,它是一個完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫它實現(xiàn)了分布式處理功能。但它的所有知識,只要在一種機型上學(xué)習(xí)了 ORACLE知識,便能在各種類型的機器上使用它。
[0034]Sybase是基于客戶/服務(wù)器體系結(jié)構(gòu)的數(shù)據(jù)庫,客戶與服務(wù)器之間采用網(wǎng)絡(luò)協(xié)議(如TCP/IP、IPX/SPX)進行連接和通訊,由客戶端向服務(wù)器發(fā)出請求,服務(wù)器端響應(yīng)請求,并進行相應(yīng)服務(wù)。由于采用了客戶/服務(wù)器結(jié)構(gòu),應(yīng)用被分在了多臺機器上運行,公開了應(yīng)用程序接口 DB-LIB,鼓勵第三方編寫DB-LIB接口。由于開放的客戶DB-LIB允許在不同的平臺使用完全相同的調(diào)用,因而使得訪問DB-LIB的應(yīng)用程序很容易從一個平臺向另一個平臺移植。同時,Sybase具有可編程數(shù)據(jù)庫、事件驅(qū)動的觸發(fā)器以及多線索化的高性能特點。
[0035]在各種類型的數(shù)據(jù)庫中,通常會出現(xiàn)以下幾種類型的函數(shù)以形成相應(yīng)的SQL語句,例如,boolean 以及包括 Timestamp、Current_timestamp 和 Gatdate O 的時間戮函數(shù)。其中,boolean數(shù)據(jù)類型的變量存儲為16位(2個字節(jié))的數(shù)值形式,但只能是True或是False。boolean變量的值顯示為True或False (在使用Print的時候),或者#TRUE#或#FALSE#(在使用Write#的時候)。使用關(guān)鍵字True與False可將boolean變量賦值為這兩個狀態(tài)中的一個。在java中boolean值只能是true和false,而不能用O和I代替,并且一定要小寫。
[0036]請參考圖1,為本發(fā)明實施方式中的一種數(shù)據(jù)庫建立系統(tǒng)的結(jié)構(gòu)示意圖,該數(shù)據(jù)庫建立系統(tǒng)10用于運行在一裝置內(nèi)置的編譯系統(tǒng)平臺中以執(zhí)行數(shù)據(jù)庫的編譯和訪問,其中,該編譯系統(tǒng)平臺可以是Linux系統(tǒng)等。該數(shù)據(jù)庫建立系統(tǒng)10包括接收單元11、判斷單元12以及翻譯單元13。
[0037]該接收單元11用于接收一通用的數(shù)據(jù)庫初始化SQL語句(下稱KSQL語句),該KSQL語句用于根據(jù)不同類型數(shù)據(jù)庫的SQL語法的差異生成適用于相應(yīng)類型數(shù)據(jù)庫的SQL語句。具體地,該KSQL語句由工程師手工編寫,本發(fā)明在不同數(shù)據(jù)庫支持不同SQL語法的基礎(chǔ)上提出的該KSQL語句,該KSQL語句有自身的語法,該語法可以方便地描述數(shù)據(jù)庫的各種功能,但它不能直接地運行在具體的目標數(shù)據(jù)庫中。因此,使用該通用SQL語句可以使外部應(yīng)用程序不再關(guān)心所運行的數(shù)據(jù)庫環(huán)境,提高了應(yīng)用的靈活性。
[0038]該判斷單元12用于判斷目標數(shù)據(jù)庫類型。具體地,該判斷單元12獲得應(yīng)用系統(tǒng)所運行的數(shù)據(jù)庫環(huán)境信息,即目標數(shù)據(jù)庫類型,該數(shù)據(jù)庫環(huán)境信息保存在配置文件中,在創(chuàng)建數(shù)據(jù)庫連接時獲取。由于KSQL語句是不能再具體的數(shù)據(jù)庫中執(zhí)行的,所以在將KSQL語句翻譯成適合在特定目標數(shù)據(jù)庫執(zhí)行的SQL語句之前,必須先判斷其所要運行的數(shù)據(jù)庫類型,從而翻譯成相應(yīng)類型的SQL語句。
[0039]該翻譯單元13用于根據(jù)該KSQL語句的鍵值編寫不同語言的字符串,以及根據(jù)該KSQL語句和鍵值字符串生成在特定目標數(shù)據(jù)庫中執(zhí)行的SQL語句。
[0040]該翻譯單元13包括解析模塊131、判斷模塊132以及替換模塊133。該翻譯單元13根據(jù)該KSQL語句和鍵值字符串生成適用于指定數(shù)據(jù)庫類型和語言的SQL語句,具體包括:該解析模塊131用于獲取該KSQL語句并解析該KSQL語句以獲得鍵值字符串。該判斷模塊132用于判斷由該解析模塊131解析得出的鍵值字符串的字段類型為構(gòu)造函數(shù)還是時間戳函數(shù)。該替換模塊133用于根據(jù)該判斷模塊132解析得出的函數(shù)類型以及目標數(shù)據(jù)庫類型語言替換該KSQL語句中鍵值字符串的值為相應(yīng)數(shù)據(jù)庫語言的字符串,并生成適應(yīng)該數(shù)據(jù)庫的各種語言的SQL語句。
[0041]在本實施方式中,當該判斷模塊132判斷該KSQL語句的鍵值字符串的字段類型為時間戳函數(shù)時,添加適用于目標數(shù)據(jù)庫類型的時間戳函數(shù)表示系統(tǒng)當前時間。
[0042]以下將針對現(xiàn)有技術(shù)中的Derby、Pgsql、Oracle以及Sybase數(shù)據(jù)庫利用該KSQL語句進行相應(yīng)數(shù)據(jù)庫建立進行舉例說明。
[0043]當目標數(shù)據(jù)庫類型為Derby數(shù)據(jù)庫時,該解析模塊131解析出該KSQL語句以獲得鍵值字符串,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定該鍵值字符串為boolean類型的函數(shù)時,該boolean函數(shù)的變量的值用I表示True以及用O表示False,該判斷模塊132進一步地判斷該鍵值字符串是否為自增長的主鍵,若是則刪除該鍵值字符串對應(yīng)的字段,若否則對該鍵值字符串不做處理。該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Derby數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。當該判斷模塊132確定該鍵值字符串為timestamp類型的函數(shù)時,進一步地添加current_timestamp函數(shù)以表示系統(tǒng)當前時間。然后,由該判斷模塊132執(zhí)行判斷該鍵值字符串是否為自主增長的主鍵以及由替換模塊133如上所述完成SQL語句的替換和生成。
[0044]當目標數(shù)據(jù)庫類型為Pgsql數(shù)據(jù)庫時,該解析模塊131解析出該KSQL語句以獲得鍵值字符串,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定該鍵值字符串為boolean類型的函數(shù)時,該boolean函數(shù)的變量的值用True表示True以及用False表示False,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Pgsql數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。當該判斷模塊132確定該鍵值字符串為timestamp類型的函數(shù)時,進一步地添加current_timestamp函數(shù)以表示系統(tǒng)當前時間。然后,由該替換模塊133如上所述完成SQL語句的替換和生成。
[0045]當目標數(shù)據(jù)庫類型為Oracle數(shù)據(jù)庫時,該解析模塊131解析出該KSQL語句以獲得鍵值字符串,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定該鍵值字符串為boolean類型的函數(shù)時,該boolean函數(shù)的變量的值用I表示True以及用O表示False,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Oracle數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。當該判斷模塊132確定該鍵值字符串為timestamp類型的函數(shù)時,進一步地添加sysdate函數(shù)以表示系統(tǒng)當前時間。然后,由該替換模塊133如上所述完成SQL語句的替換和生成。
[0046]當目標數(shù)據(jù)庫類型為Sybase數(shù)據(jù)庫時,該解析模塊131解析出該KSQL語句以獲得鍵值字符串,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定該鍵值字符串為boolean類型的函數(shù)時,該boolean函數(shù)的變量的值用I表示True以及用O表示False,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Sybase數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。當該判斷模塊132確定該鍵值字符串為timestamp類型的函數(shù)時,進一步地添加getdate O函數(shù)以表示系統(tǒng)當前時間。然后,由該替換模塊133如上所述完成SQL語句的替換和生成。
[0047]例如,該接收單元10接收到的編寫的KSQL語句為:
[0048]insert into Users (userid, username, enabled) values (I, $ {users,defaultuser}, true);
[0049]編寫鍵值users, defaultuser對應(yīng)的各種語言的字符串:
[0050]users, defaultuser =系統(tǒng)缺省 root 用戶;
[0051]users, defaultuser =系統(tǒng)缺省 root 用戶;
[0052]users, defaultuser = Default user ;
[0053]該翻譯單元13根據(jù)該KSQL語句和鍵值字符串生成適用于指定數(shù)據(jù)庫類型和語言的SQL語句,如:
[0054]Derby 簡體中文:insert into Users (username, enabled) values ('系統(tǒng)缺省root 用戶 ’,I);[0055]Derby 繁體中文:insert into Users (username, enabled) values ('系統(tǒng)缺省root 用戶 ’,I);
[0056]Derby 英文:insert into Users (username, enabled) values (’Default user’,
I);
[0057]Pgsql 簡體中文:insert into Users (username, enabled) values ('系統(tǒng)缺省root 用戶',true);
[0058]Pgsql 繁體中文:insert into Users (username, enabled) values ('系統(tǒng)缺省root 用戶 ’,true);
[0059]Pgsql 英文:insert into Users (username, enabled) values (’Default user’,true)o
[0060]請參閱圖2,為本發(fā)明數(shù)據(jù)庫建立方法的流程圖,該方法包括:
[0061]步驟S20,該接收單元11接收一通用的數(shù)據(jù)庫初始化SQL語句(下稱KSQL語句)。
[0062]該KSQL語句用于根據(jù)不同類型數(shù)據(jù)庫的SQL語法的差異生成適用于相應(yīng)類型數(shù)據(jù)庫的SQL語句。
[0063]具體地,該KSQL語句由工程師手工編寫,本發(fā)明在不同數(shù)據(jù)庫支持不同SQL語法的基礎(chǔ)上提出的該KSQL語句,該KSQL語句有自身的語法,該語法可以方便地描述數(shù)據(jù)庫的各種功能,但它不能直接地運行在具體的目標數(shù)據(jù)庫中。因此,使用該通用SQL語句可以使外部應(yīng)用程序不再關(guān)心所運行的數(shù)據(jù)庫環(huán)境,提高了應(yīng)用的靈活性。
[0064]步驟S21,該判斷單元12判斷目標數(shù)據(jù)庫類型。
[0065]具體地,該判斷單元12獲得應(yīng)用系統(tǒng)所運行的數(shù)據(jù)庫環(huán)境信息,即目標數(shù)據(jù)庫類型,該數(shù)據(jù)庫環(huán)境信息保存在配置文件中,在創(chuàng)建數(shù)據(jù)庫連接時獲取。由于KSQL語句是不能再具體的數(shù)據(jù)庫中執(zhí)行的,所以在將KSQL語句翻譯成適合在特定目標數(shù)據(jù)庫執(zhí)行的SQL語句之前,必須先判斷其所要運行的數(shù)據(jù)庫類型,從而翻譯成相應(yīng)類型的SQL語句。
[0066]步驟S22,該翻譯單元13根據(jù)該KSQL語句的鍵值編寫不同語言的字符串,以及根據(jù)確定的目標類型數(shù)據(jù)庫的SQL語法的差異生成適用于相應(yīng)類型數(shù)據(jù)庫的SQL語句。
[0067]具體地,該翻譯單元13根據(jù)該KSQL語句和鍵值字符串生成適用于指定數(shù)據(jù)庫類型和語言的SQL語句,包括:該解析模塊131獲取該KSQL語句并解析該KSQL語句以獲得鍵值字符串。該判斷模塊132判斷由該解析模塊131解析得出的鍵值字符串的字段類型為構(gòu)造函數(shù)還是時間戳函數(shù)。該替換模塊133根據(jù)該判斷模塊132解析得出的函數(shù)類型以及目標數(shù)據(jù)庫類型語言替換該KSQL語句中鍵值字符串的值為相應(yīng)數(shù)據(jù)庫語言的字符串,并生成適應(yīng)該數(shù)據(jù)庫的各種語言的SQL語句。
[0068]在本實施方式中,當該判斷模塊132判斷該KSQL語句的鍵值字符串的字段類型為時間戳函數(shù)時,添加適用于目標數(shù)據(jù)庫類型的時間戳函數(shù)表示系統(tǒng)當前時間。
[0069]請參閱圖3,為本發(fā)明實施方式中的Derby數(shù)據(jù)庫建立方法的流程圖,該方法包括:
[0070]步驟S30,該解析模塊131解析出該KSQL語句以獲得鍵值字符串。
[0071]步驟S31,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定為boolean類型的函數(shù)時,進入步驟S32 ;當確定為timestamp類型的函數(shù)時進入步驟S35。[0072]步驟S32,該判斷模塊132判斷該鍵值字符串是否為自增長的主鍵,若是,則進入步驟S33,否則,進入步驟S34。其中,該boolean函數(shù)的變量的值用I表示True以及用O表不False。
[0073]步驟S33,該替換模塊133刪除該鍵值字符串對應(yīng)的字段。
[0074]步驟S34,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Derby數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。然后,本流程結(jié)束。
[0075]步驟S35,該替換模塊133添加current_timestamp函數(shù)以表示系統(tǒng)當前時間,然后,返回步驟S32。
[0076]請參閱圖4,為本發(fā)明實施方式中的Pgsql數(shù)據(jù)庫建立方法的流程圖,該方法包括:
[0077]步驟S40,該解析模塊131解析出該Pgsql語句以獲得鍵值字符串.[0078]步驟S41,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定為boolean類型的函數(shù)時,進入步驟S42 ;當確定為timestamp類型的函數(shù)時進入步驟S43。
[0079]步驟S42,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Pgsql數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。然后,本流程結(jié)束。 [0080]步驟S43, 該替換模塊133添加current_timestamp函數(shù)以表示系統(tǒng)當前時間,然后,返回步驟S42。
[0081]圖5為本發(fā)明實施方式中的Oracle數(shù)據(jù)庫建立方法的流程圖,該方法包括:
[0082]步驟S50,該解析模塊131解析出該Oracle語句以獲得鍵值字符串.[0083]步驟S51,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定為boolean類型的函數(shù)時,進入步驟S52 ;當確定為timestamp類型的函數(shù)時進入步驟S53。
[0084]步驟S52,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Oracle數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。然后,本流程結(jié)束。
[0085]步驟S53,該替換模塊133添加sysdate函數(shù)以表示系統(tǒng)當前時間,然后,返回步驟S52。
[0086]圖6為本發(fā)明實施方式中的Sybase數(shù)據(jù)庫建立方法的流程圖,該方法包括:
[0087]步驟S60,該解析模塊131解析出該Sybase語句以獲得鍵值字符串。
[0088]步驟S61,該判斷模塊132判斷該解析得出的鍵值字符串為boolean類型的函數(shù)還是timestamp類型的函數(shù)。當確定為boolean類型的函數(shù)時,進入步驟S62 ;當確定為timestamp類型的函數(shù)時進入步驟S63。
[0089]步驟S62,該替換模塊133將KSQL語句中的鍵值字符串的值替換為適用Sybase數(shù)據(jù)庫的字符串,并生成相應(yīng)的SQL語句。然后,本流程結(jié)束。
[0090]步驟S63,該替換模塊133添加getdate O函數(shù)以表示系統(tǒng)當前時間,然后,返回步驟 S62。
[0091]本發(fā)明提供的一種數(shù)據(jù)庫建立系統(tǒng)、裝置和方法,針對數(shù)據(jù)庫數(shù)據(jù)初始化通用的一條SQL語句生成適應(yīng)各類型數(shù)據(jù)庫和語言的SQL語句,使得初始化SQL語句易維護,減少維護過程中出錯的風(fēng)險。[0092]以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的【技術(shù)領(lǐng)域】,均同理包括在本發(fā)明的專利保護范圍內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)庫建立系統(tǒng),用于執(zhí)行數(shù)據(jù)庫的編譯和訪問,其特征在于,所述數(shù)據(jù)庫建立系統(tǒng)包括: 接收單元,用于接收一通用的數(shù)據(jù)庫初始化SQL語句; 判斷單元,用于判斷目標數(shù)據(jù)庫類型;以及 翻譯單元,根據(jù)所述數(shù)據(jù)庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據(jù)所述數(shù)據(jù)庫初始化SQL語句和鍵值字符串生成在所述目標數(shù)據(jù)庫中執(zhí)行的SQL語句。
2.如權(quán)利要求1所述的數(shù)據(jù)庫建立系統(tǒng),其特征在于,所述翻譯單元包括: 解析模塊,用于獲取所述數(shù)據(jù)庫初始化SQL語句并解析所述數(shù)據(jù)庫初始化SQL語句以獲得鍵值字符串; 判斷模塊,用于判斷由所述解析模塊解析得出的鍵值字符串的字段類型為構(gòu)造函數(shù)還是時間戳函數(shù);以及 替換模塊,用于根據(jù)所述判斷模塊解析得出的函數(shù)類型以及所述目標數(shù)據(jù)庫類型語言替換所述數(shù)據(jù)庫初始化SQL語句中鍵值字符串的值為所述目標數(shù)據(jù)庫語言的字符串,并生成適應(yīng)所述目標數(shù)據(jù)庫的各種語言的SQL語句。
3.如權(quán)利要求2所述的數(shù)據(jù)庫建立系統(tǒng),其特征在于,當所述判斷模塊判斷所述數(shù)據(jù)庫初始化SQL語句的鍵值字符串的字段類型為時間戳函數(shù)時,添加適用于所述目標數(shù)據(jù)庫類型的時間戳函數(shù)表示系統(tǒng)當前時間。
4.如權(quán)利要求1所述的數(shù)據(jù)庫建立系統(tǒng),其特征在于,所述目標數(shù)據(jù)類型包括Derby、Pgsql> Oracle 以及 Sybase。
5.如權(quán)利要求1所述的數(shù)據(jù)庫建立系統(tǒng),其特征在于,所述判斷單元獲得應(yīng)用系統(tǒng)所運行的數(shù)據(jù)庫環(huán)境信息以判斷目標數(shù)據(jù)庫類型,所述數(shù)據(jù)庫環(huán)境信息保存在配置文件中,在創(chuàng)建數(shù)據(jù)庫連接時獲取。
6.一種數(shù)據(jù)庫建立裝置,所述數(shù)據(jù)庫建立裝置用于運行如權(quán)利要求1-5中任一所述的數(shù)據(jù)庫建立系統(tǒng)。
7.一種數(shù)據(jù)庫建立方法,其特征在于,所述方法包括: 接收一通用的數(shù)據(jù)庫初始化SQL語句; 判斷目標數(shù)據(jù)庫類型;以及 根據(jù)所述數(shù)據(jù)庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據(jù)確定的目標類型數(shù)據(jù)庫的SQL語法的差異生成適用于相應(yīng)類型數(shù)據(jù)庫的SQL語句。
8.如權(quán)利要求7所述的數(shù)據(jù)庫建立方法,其特征在于,“根據(jù)所述數(shù)據(jù)庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據(jù)確定的目標類型數(shù)據(jù)庫的SQL語法的差異生成適用于相應(yīng)類型數(shù)據(jù)庫的SQL語句”包括: 獲取所述數(shù)據(jù)庫初始化SQL語句并解析所述數(shù)據(jù)庫初始化SQL語句以獲得鍵值字符串; 判斷解析得出的鍵值字符串的字段類型為構(gòu)造函數(shù)還是時間戳函數(shù);以及 根據(jù)解析得出的函數(shù)類型以及所述目標數(shù)據(jù)庫類型語言替換所述數(shù)據(jù)庫初始化SQL語句中鍵值字符串的值為所述目標數(shù)據(jù)庫語言的字符串,并生成適應(yīng)所述目標數(shù)據(jù)庫的各種語目的SQL語句。
9.如權(quán)利要求8所述的數(shù)據(jù)庫建立方法,其特征在于,當執(zhí)行“判斷解析得出的鍵值字符串的字段類型為構(gòu)造函數(shù)還是時間戳函數(shù)”確定所述數(shù)據(jù)庫初始化SQL語句的鍵值字符串的字段類型為時間戳函數(shù)時,還包括: 添加適用于所述目標數(shù)據(jù)庫類型的時間戳函數(shù)表示系統(tǒng)當前時間。
10.如權(quán)利要求7所述的數(shù)據(jù)庫建立方法,其特征在于,所述目標數(shù)據(jù)類型包括Derby、Pgsql> Oracle 以及 Sybase。
11.如權(quán)利要求7所述的數(shù)據(jù)庫建立方法,其特征在于,“判斷目標數(shù)據(jù)庫類型”包括或得應(yīng)用系統(tǒng)所運行的數(shù)據(jù)庫環(huán)境信息,所述數(shù)據(jù)庫環(huán)境信息保存在配置文件中,在創(chuàng)建數(shù)據(jù)庫連接 時獲取。
【文檔編號】G06F17/30GK103914572SQ201410176940
【公開日】2014年7月9日 申請日期:2014年4月29日 優(yōu)先權(quán)日:2014年4月29日
【發(fā)明者】黃建陽, 游磊青 申請人:福建星網(wǎng)視易信息系統(tǒng)有限公司