本申請涉及數(shù)據(jù)庫數(shù)據(jù)管理,具體涉及一種用于數(shù)據(jù)庫數(shù)據(jù)交互的數(shù)據(jù)庫適配方法和系統(tǒng)。
背景技術(shù):
1、現(xiàn)階段,在對計算軟件系統(tǒng)進(jìn)行項目交付時,經(jīng)常會遇到客戶的數(shù)據(jù)庫和軟件系統(tǒng)所依賴的數(shù)據(jù)庫類型不一致的情況,此時都需要根據(jù)客戶的數(shù)據(jù)庫類型重新調(diào)整系統(tǒng)的數(shù)據(jù)庫連接方式和sql語句,該方式不但耗時,且容易出現(xiàn)錯改、漏改等情況。并且對接到其它項目時,有可能還需要重復(fù)同樣的工作。因此,需要設(shè)計一種較通用的數(shù)據(jù)庫適配方法,來兼容和適配不同的數(shù)據(jù)庫。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明主要解決的技術(shù)問題是如何適配和兼容不同類型的數(shù)據(jù)庫,以實(shí)現(xiàn)數(shù)據(jù)的正常交互。
2、根據(jù)第一方面,一種實(shí)施例中提供一種用于數(shù)據(jù)庫數(shù)據(jù)交互的數(shù)據(jù)庫適配方法,包括:
3、獲取待數(shù)據(jù)交互的源數(shù)據(jù)庫的數(shù)據(jù)庫類型;
4、依據(jù)數(shù)據(jù)庫類型獲取所述源數(shù)據(jù)庫的數(shù)據(jù)庫實(shí)例生成方式和sql處理器;
5、生成與所述源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互的連接實(shí)例;
6、通過預(yù)設(shè)的攔截器攔截所述源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互時的sql操作;
7、檢測所述sql操作中每個sql語句與目標(biāo)數(shù)據(jù)庫不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù);
8、對所述sql操作中不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù)進(jìn)行替換,并按替換后的sql操作對目標(biāo)數(shù)據(jù)庫進(jìn)行操作,以完成從所述源數(shù)據(jù)庫向所述目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)交互。
9、一實(shí)施例中,所述獲取待數(shù)據(jù)交互的源數(shù)據(jù)庫的數(shù)據(jù)庫類型,包括:
10、根據(jù)調(diào)用所述源數(shù)據(jù)庫的nacos配置來動態(tài)獲取所述源數(shù)據(jù)庫的類型;
11、所述源數(shù)據(jù)庫的類型包括mysql數(shù)據(jù)庫;
12、所述目標(biāo)數(shù)據(jù)庫的類型為達(dá)夢數(shù)據(jù)庫或oceanbase數(shù)據(jù)庫。
13、一實(shí)施例中,所述依據(jù)數(shù)據(jù)庫類型獲取所述源數(shù)據(jù)庫的數(shù)據(jù)庫實(shí)例生成方式和sql處理器,包括:
14、應(yīng)用數(shù)據(jù)源實(shí)例工廠根據(jù)數(shù)據(jù)庫實(shí)例生成方法和/或數(shù)據(jù)池連接參數(shù),生成所述源數(shù)據(jù)庫的連接實(shí)例;
15、所述數(shù)據(jù)池連接參數(shù)包括數(shù)據(jù)庫連接url、數(shù)據(jù)庫連接端口、數(shù)據(jù)庫名、數(shù)據(jù)庫連接用戶名、數(shù)據(jù)庫連接密碼、數(shù)據(jù)庫類型、數(shù)據(jù)庫驅(qū)動名、連接池初始化大小、連接池最大數(shù)量和/或連接池最小數(shù)量。
16、一實(shí)施例中,所述檢測所述sql操作中每個所述sql語句與目標(biāo)數(shù)據(jù)庫不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù),包括:
17、通過調(diào)用鏈的方式逐個檢查所述sql語句中與所述目標(biāo)數(shù)據(jù)庫不同的數(shù)據(jù)庫關(guān)鍵字或者數(shù)據(jù)庫函數(shù);
18、所述數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù)包括:`、concat、date_add、date_sub、date_format、str_to_date、ifnull和/或now()。
19、一實(shí)施例中,所述對所述sql操作中不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù)進(jìn)行替換,并按替換后的sql操作對目標(biāo)數(shù)據(jù)庫進(jìn)行操作,包括:
20、當(dāng)沒有匹配到需要替換的所述數(shù)據(jù)庫關(guān)鍵字和/或所述數(shù)據(jù)庫函數(shù)時直接跳過;
21、當(dāng)匹配到需要替換的數(shù)據(jù)庫關(guān)鍵字或數(shù)據(jù)庫函數(shù)時,通過調(diào)用鏈的方式按照每個數(shù)據(jù)庫關(guān)鍵字和數(shù)據(jù)庫函數(shù)的同步,來實(shí)現(xiàn)所述sql語句的替換;
22、根據(jù)替換后的所述sql語句重新封裝數(shù)據(jù)庫操作對象,完成對目標(biāo)數(shù)據(jù)庫的操作。
23、一實(shí)施例中,所述通過預(yù)設(shè)的攔截器攔截所述源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互時的sql操作,包括:
24、預(yù)設(shè)的所述攔截器包括mybatis攔截器;
25、所述sql操作包括對數(shù)據(jù)庫的查詢操作和/或?qū)?shù)據(jù)庫數(shù)據(jù)的修改操作。
26、如權(quán)利要求1所述的數(shù)據(jù)庫適配方法,其特征在于,所述數(shù)據(jù)庫實(shí)例生成方式包括mysql實(shí)例生成方式、達(dá)夢數(shù)據(jù)庫生成方式和/或oceanbase數(shù)據(jù)庫生成方式。
27、根據(jù)第二方面,一種實(shí)施例中提供一種計算機(jī)可讀存儲介質(zhì),所述介質(zhì)上存儲有計算機(jī)程序,所述計算機(jī)程序能夠被處理器執(zhí)行以實(shí)現(xiàn)如第一方面所述的數(shù)據(jù)庫適配方法。
28、根據(jù)第三方面,一種實(shí)施例中提供一種計算機(jī)程序產(chǎn)品,包括計算機(jī)程序和/或指令,所述計算機(jī)程序和/或指令被處理器執(zhí)行時實(shí)現(xiàn)第一方面所述的數(shù)據(jù)庫適配方法。
29、根據(jù)第四方面,一種實(shí)施例中提供一種用于數(shù)據(jù)庫數(shù)據(jù)交互的數(shù)據(jù)庫適配系統(tǒng),其特征在于,用于應(yīng)用如第一方面所述的數(shù)據(jù)庫適配方法,所述數(shù)據(jù)庫適配系統(tǒng)包括:
30、類型獲取單元,用于獲取待數(shù)據(jù)交互的源數(shù)據(jù)庫的數(shù)據(jù)庫類型;
31、參數(shù)獲取單元,用于依據(jù)數(shù)據(jù)庫類型獲取所述源數(shù)據(jù)庫的數(shù)據(jù)庫實(shí)例生成方式和sql處理器;
32、實(shí)例獲取單元,用于生成與所述源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互的連接實(shí)例;
33、攔截單元,用于通過預(yù)設(shè)的攔截器攔截所述源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互時的sql操作;
34、差異檢測單元,用于檢測所述sql操作中每個所述sql語句與目標(biāo)數(shù)據(jù)庫不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù);
35、替換執(zhí)行單元,用于對所述sql操作中不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù)進(jìn)行替換,并按替換后的sql操作對目標(biāo)數(shù)據(jù)庫進(jìn)行操作,以完成從所述源數(shù)據(jù)庫向所述目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)交互。
36、據(jù)上述實(shí)施例的數(shù)據(jù)庫適配方法,由于對類型不匹配的數(shù)據(jù)庫,通過替換sql語句中不同數(shù)據(jù)庫關(guān)鍵字和數(shù)據(jù)庫函數(shù)方式實(shí)現(xiàn)數(shù)據(jù)交互,進(jìn)而實(shí)現(xiàn)系統(tǒng)數(shù)據(jù)庫的適配,不但減免人工操作,還能大大提高數(shù)據(jù)交互的工作效率。
1.一種用于數(shù)據(jù)庫數(shù)據(jù)交互的數(shù)據(jù)庫適配方法,其特征在于,包括:
2.如權(quán)利要求1所述的數(shù)據(jù)庫適配方法,其特征在于,所述獲取待數(shù)據(jù)交互的源數(shù)據(jù)庫的數(shù)據(jù)庫類型,包括:
3.如權(quán)利要求1所述的數(shù)據(jù)庫適配方法,其特征在于,所述依據(jù)數(shù)據(jù)庫類型獲取所述源數(shù)據(jù)庫的數(shù)據(jù)庫實(shí)例生成方式和sql處理器,包括:
4.如權(quán)利要求1所述的數(shù)據(jù)庫適配方法,其特征在于,所述檢測所述sql操作中每個所述sql語句與目標(biāo)數(shù)據(jù)庫不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù),包括:
5.如權(quán)利要求4所述的數(shù)據(jù)庫適配方法,其特征在于,所述對所述sql操作中不同的數(shù)據(jù)庫關(guān)鍵字和/或數(shù)據(jù)庫函數(shù)進(jìn)行替換,并按替換后的sql操作對目標(biāo)數(shù)據(jù)庫進(jìn)行操作,包括:
6.如權(quán)利要求1所述的數(shù)據(jù)庫適配方法,其特征在于,所述通過預(yù)設(shè)的攔截器攔截所述源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互時的sql操作,包括:
7.如權(quán)利要求1所述的數(shù)據(jù)庫適配方法,其特征在于,所述數(shù)據(jù)庫實(shí)例生成方式包括mysql實(shí)例生成方式、達(dá)夢數(shù)據(jù)庫生成方式和/或oceanbase數(shù)據(jù)庫生成方式。
8.一種計算機(jī)可讀存儲介質(zhì),其特征在于,所述介質(zhì)上存儲有計算機(jī)程序,所述計算機(jī)程序能夠被處理器執(zhí)行以實(shí)現(xiàn)如權(quán)利要求1-7中任一項所述的數(shù)據(jù)庫適配方法。
9.一種計算機(jī)程序產(chǎn)品,包括計算機(jī)程序和/或指令,其特征在于,所述計算機(jī)程序和/或指令被處理器執(zhí)行時實(shí)現(xiàn)權(quán)利要求1-7中任一項所述的數(shù)據(jù)庫適配方法。
10.一種用于數(shù)據(jù)庫數(shù)據(jù)交互的數(shù)據(jù)庫適配系統(tǒng),其特征在于,用于應(yīng)用如權(quán)利要求1至7中任一項所述的數(shù)據(jù)庫適配方法,所述數(shù)據(jù)庫適配系統(tǒng)包括: