中文字幕无码日韩视频无码三区

數據庫建立系統、裝置和方法

文檔序號:6545204閱讀:240來源:國(guo)知局(ju)
數據庫建立系統、裝置和方法
【專利摘要】本發明提供一種數據庫建立系統,運行于一編譯系統中用于執行數據庫的編譯和訪問。該數據庫建立系統包括接收單元、判斷單元和翻譯單元。接收單元接收一通用的數據庫初始化SQL語句,判斷單元判斷目標數據庫類型,翻譯單元根據該數據庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據該數據庫初始化SQL語句和鍵值字符串生成在該目標數據庫中執行的SQL語句。本發明還提供一種數據庫建立方法及裝置,利用本發明,針對數據庫數據初始化通用的一條SQL語句生成適應各類型數據庫和語言的SQL語句,使得初始化SQL語句易維護,減少維護過程中出錯的風險。
【專利說明】 數據庫建立系統、裝置和方法
【技術領域】
[0001]本發明涉及數據庫領域,尤其涉及一種數據庫建立系統、裝置和方法。
【背景技術】
[0002]現有的數據庫產品在實現標準的SQL語法之外還支持各自特有的SQL語法,這些SQL語法都是不通用的。例如,在SQL SERVER中支持下面的語句:SELECT T0P100*FR0M t,但在DB2下由于不支持TOP關鍵字,所以該語句不能被正確編譯執行而必須寫成等效的語句:SELECT*FR0M t FETCH FlRSTlOOROffS ONLY。可以看出,實現同樣的功能,即從表t中選擇頭100條記錄,在SQL SERVER與DB2中都是可以實現的,但實現的方式即提交的查詢語句卻并不相同。因此,工程師在進行數據庫系統開發時需要根據不同產品手工編寫多條SQL語句,這樣將給開發和維護帶來極大的不便,降低研發效率以及出錯風險高。

【發明內容】

[0003]本發明的主要目的為提供一種數據庫建立系統、裝置和方法,基于通用SQL語句進行不同類型的數據庫的建立,從而在減少工程師手工編寫語句工作量的前提下提高開發維護效率。
[0004]本發明提供一種數據庫建立系統,運行于一編譯系統中用于執行數據庫的編譯和訪問,該數據庫建立系統包括:
[0005]接收單元,用于接收一通用的數據庫初始化SQL語句,
[0006]判斷單元,用于判斷目標數據庫類型,以及
[0007]翻譯單元,根據該數據庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據該數據庫初始化SQL語句和鍵值字符串生成在該目標數據庫中執行的SQL語句。
[0008]進一步地,本發明還提供一種數據庫建立裝置,包括如上所述的數據庫建立系統。
[0009]進一步地,本發明還提供一種數據庫建立方法,該方法包括:
[0010]接收一通用的數據庫初始化SQL語句,
[0011]判斷目標數據庫類型,以及
[0012]根據該數據庫初始化SQL語句的鍵值編寫不同語言的字符串,以及根據確定的目標類型數據庫的SQL語法的差異生成適用于相應類型數據庫的SQL語句。
[0013]本發明提供的一種數據庫建立系統、裝置和方法,針對數據庫數據初始化通用的一條SQL語句生成適應各類型數據庫和語言的SQL語句,使得初始化SQL語句易維護,減少維護過程中出錯的風險。
【專利附圖】

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