技術(shù)領(lǐng)域
本發(fā)明涉及一種數(shù)據(jù)庫(kù)切換方法及裝置,屬于數(shù)據(jù)庫(kù)領(lǐng)域,具體是涉及一種多數(shù)據(jù)庫(kù)切換方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)的發(fā)展,業(yè)務(wù)的復(fù)雜程度逐漸增加,以往單種數(shù)據(jù)庫(kù)已經(jīng)無(wú)法滿足業(yè)務(wù)需求,現(xiàn)有的應(yīng)用中,需要在一個(gè)項(xiàng)目中同時(shí)使用多種數(shù)據(jù)庫(kù)系統(tǒng)。然而現(xiàn)有的 php框架大都是針對(duì)單種數(shù)據(jù)庫(kù)系統(tǒng)做配置,在連接時(shí),需要頻繁配置數(shù)據(jù)庫(kù)連接參數(shù),操作繁瑣、復(fù)雜,難以滿足多數(shù)據(jù)庫(kù)的連接需求。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種多數(shù)據(jù)庫(kù)切換方法及裝置,其目的在于解決多數(shù)據(jù)庫(kù)連接時(shí),需要頻繁配置數(shù)據(jù)庫(kù)連接參數(shù),操作繁瑣、復(fù)雜,難以滿足多數(shù)據(jù)庫(kù)的連接需求的問(wèn)題。
為了解決上述問(wèn)題,根據(jù)本發(fā)明的一個(gè)方面,提供了一種多數(shù)據(jù)庫(kù)切換方法,包括:
步驟1,定義用于描述數(shù)據(jù)庫(kù)連接參數(shù)的數(shù)據(jù)庫(kù)配置模板;
步驟2,定義并初始化數(shù)據(jù)庫(kù)連接對(duì)象,所述數(shù)據(jù)庫(kù)連接對(duì)象接收其它程序傳遞的數(shù)據(jù)庫(kù)標(biāo)識(shí),并根據(jù)在數(shù)據(jù)庫(kù)配置模板中查找到的與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)連接對(duì)象;
步驟3,調(diào)用數(shù)據(jù)庫(kù)連接對(duì)象,并向數(shù)據(jù)庫(kù)連接對(duì)象傳遞數(shù)據(jù)庫(kù)標(biāo)識(shí),接收數(shù)據(jù)庫(kù)連接對(duì)象的返回結(jié)果。
優(yōu)選的,上述的一種多數(shù)據(jù)庫(kù)切換方法,所述步驟1中,由初始化程序?qū)⒍x好的數(shù)據(jù)庫(kù)配置模板讀入計(jì)算機(jī)內(nèi)存中。
優(yōu)選的,上述的一種多數(shù)據(jù)庫(kù)切換方法,所述步驟3中,若數(shù)據(jù)庫(kù)連接對(duì)象在數(shù)據(jù)庫(kù)配置模板中未查找到與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù),則向用戶返回錯(cuò)誤提示;否則,用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)連接對(duì)象。
優(yōu)選的,上述的一種多數(shù)據(jù)庫(kù)切換方法,所述步驟3中,若數(shù)據(jù)庫(kù)連接對(duì)象用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù)失敗,則返回錯(cuò)誤提示;否則,利用返回的數(shù)據(jù)連接對(duì)象讀取數(shù)據(jù)。
為了解決上述問(wèn)題,根據(jù)本發(fā)明的另一個(gè)方面,提供了一種多數(shù)據(jù)庫(kù)切換裝置,包括:
模板配置模塊,定義用于描述數(shù)據(jù)庫(kù)連接參數(shù)的數(shù)據(jù)庫(kù)配置模板;
代理生成模塊,定義并初始化數(shù)據(jù)庫(kù)連接對(duì)象,所述數(shù)據(jù)庫(kù)連接對(duì)象接收其它程序傳遞的數(shù)據(jù)庫(kù)標(biāo)識(shí),并根據(jù)在數(shù)據(jù)庫(kù)配置模板中查找到的與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)連接對(duì)象;
連接調(diào)用模塊,調(diào)用數(shù)據(jù)庫(kù)連接對(duì)象,并向數(shù)據(jù)庫(kù)連接對(duì)象傳遞數(shù)據(jù)庫(kù)標(biāo)識(shí),接收數(shù)據(jù)庫(kù)連接對(duì)象的返回結(jié)果。
優(yōu)化的,上述的一種多數(shù)據(jù)庫(kù)切換裝置,所述模板配置模塊中,由初始化程序?qū)⒍x好的數(shù)據(jù)庫(kù)配置模板讀入計(jì)算機(jī)內(nèi)存中。
優(yōu)化的,上述的一種多數(shù)據(jù)庫(kù)切換裝置,所述連接調(diào)用模塊中,若數(shù)據(jù)庫(kù)連接對(duì)象在數(shù)據(jù)庫(kù)配置模板中未查找到與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù),則向用戶返回錯(cuò)誤提示;否則,用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)連接對(duì)象。
優(yōu)化的,上述的一種多數(shù)據(jù)庫(kù)切換裝置,所述連接調(diào)用模塊中,若數(shù)據(jù)庫(kù)連接對(duì)象用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù)失敗,則返回錯(cuò)誤提示;否則,利用返回的數(shù)據(jù)連接對(duì)象讀取數(shù)據(jù)。
總體而言,本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比, 本發(fā)明利用數(shù)據(jù)庫(kù)連接工廠類(lèi)建立并返回?cái)?shù)據(jù)庫(kù)連接,簡(jiǎn)化了操作,提高了數(shù)據(jù)庫(kù)連接效率。
附圖說(shuō)明
附圖1是本發(fā)明的流程示意圖。
附圖2是本發(fā)明的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面通過(guò)實(shí)施例,并結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體的說(shuō)明。
一種多數(shù)據(jù)庫(kù)切換方法,包括:
步驟1,定義用于描述數(shù)據(jù)庫(kù)連接參數(shù)的數(shù)據(jù)庫(kù)配置模板;
步驟2,定義并初始化數(shù)據(jù)庫(kù)連接對(duì)象,所述數(shù)據(jù)庫(kù)連接對(duì)象接收其它程序傳遞的數(shù)據(jù)庫(kù)標(biāo)識(shí),并根據(jù)在數(shù)據(jù)庫(kù)配置模板中查找到的與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)連接對(duì)象;
步驟3,調(diào)用數(shù)據(jù)庫(kù)連接對(duì)象,并向數(shù)據(jù)庫(kù)連接對(duì)象傳遞數(shù)據(jù)庫(kù)標(biāo)識(shí),接收數(shù)據(jù)庫(kù)連接對(duì)象的返回結(jié)果。
其中:步驟1中,由初始化程序?qū)⒍x好的數(shù)據(jù)庫(kù)配置模板讀入計(jì)算機(jī)內(nèi)存中。步驟3中,若數(shù)據(jù)庫(kù)連接對(duì)象在數(shù)據(jù)庫(kù)配置模板中未查找到與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù),則向用戶返回錯(cuò)誤提示;否則,用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),若數(shù)據(jù)庫(kù)連接對(duì)象用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù)失敗,則返回錯(cuò)誤提示;否則,利用返回的數(shù)據(jù)連接對(duì)象讀取數(shù)據(jù)
一種多數(shù)據(jù)庫(kù)切換裝置,包括:
模板配置模塊,定義用于描述數(shù)據(jù)庫(kù)連接參數(shù)的數(shù)據(jù)庫(kù)配置模板;
代理生成模塊,定義并初始化數(shù)據(jù)庫(kù)連接對(duì)象,所述數(shù)據(jù)庫(kù)連接對(duì)象接收其它程序傳遞的數(shù)據(jù)庫(kù)標(biāo)識(shí),并根據(jù)在數(shù)據(jù)庫(kù)配置模板中查找到的與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),并返回?cái)?shù)據(jù)連接對(duì)象;
連接調(diào)用模塊,調(diào)用數(shù)據(jù)庫(kù)連接對(duì)象,并向數(shù)據(jù)庫(kù)連接對(duì)象傳遞數(shù)據(jù)庫(kù)標(biāo)識(shí),接收數(shù)據(jù)庫(kù)連接對(duì)象的返回結(jié)果。
其中,模板配置模塊中,由初始化程序?qū)⒍x好的數(shù)據(jù)庫(kù)配置模板讀入計(jì)算機(jī)內(nèi)存中。連接調(diào)用模塊中,若數(shù)據(jù)庫(kù)連接對(duì)象在數(shù)據(jù)庫(kù)配置模板中未查找到與數(shù)據(jù)庫(kù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接參數(shù),則向用戶返回錯(cuò)誤提示;否則,用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù),若數(shù)據(jù)庫(kù)連接對(duì)象用查找到的數(shù)據(jù)庫(kù)連接參數(shù)連接數(shù)據(jù)庫(kù)失敗,則返回錯(cuò)誤提示;否則,利用返回的數(shù)據(jù)連接對(duì)象讀取數(shù)據(jù)。
實(shí)施例1
本發(fā)明的操作流程如圖1所示。
首先定義多數(shù)據(jù)庫(kù)配置的格式如下,該配置隨程序啟動(dòng)讀入內(nèi)存:
'db' => [
// mysql 的配置
'mysql' => [
'dsn' => '',
'username' => '',
'password' => '',
'charset' => 'utf8',
],
// 其它數(shù)據(jù)庫(kù)的配置
'otherdb' => [
'dsn' => '',
'username' => '',
'password' => '',
'charset' => 'utf8',
]
]
然后定義數(shù)據(jù)庫(kù)連接工廠類(lèi)DbFactory,該類(lèi)用于計(jì)算具體要使用的數(shù)據(jù)庫(kù),并返回連接的數(shù)據(jù)庫(kù)的句柄,以便操作數(shù)據(jù)庫(kù)。該類(lèi)有一個(gè)唯一入口方法,定義為 instance,instance 方法可以接收一個(gè)參數(shù),該參數(shù)用于指定我們需要使用的數(shù)據(jù)庫(kù),與第一步中的配置相對(duì)應(yīng)。方法會(huì)根據(jù)指定的參數(shù)讀取配置,如果讀取到則用讀取到的配置連接數(shù)據(jù)庫(kù),如果讀取失敗,則拋出錯(cuò)誤提示。在連接數(shù)據(jù)庫(kù)過(guò)程中如果有錯(cuò)誤,拋出錯(cuò)誤,如果成功,返回?cái)?shù)據(jù)庫(kù)連接標(biāo)識(shí)。
當(dāng)需要使用某數(shù)據(jù)庫(kù)讀取信息時(shí),可以使用第二步中的 DbFactory 來(lái)連接數(shù)據(jù)庫(kù): DbFactory::instance('數(shù)據(jù)庫(kù)標(biāo)識(shí)')。
例如需要讀取用戶信息,可使用如下使用代碼:
$db = DbFactory::instance('mysql');
$db->query('select username from users');
以上方法實(shí)施例和裝置實(shí)施例是一一對(duì)應(yīng)的,因此方法實(shí)施例的擴(kuò)展方式亦可用于裝置實(shí)施例。
本文中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明精神作舉例說(shuō)明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類(lèi)似的方式替代,但并不會(huì)偏離本發(fā)明的精神或者超越所附權(quán)利要求書(shū)所定義的范圍。