一種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法和系統(tǒng),包括:步驟1)使用c++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝;其中,數(shù)據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連接池連接的數(shù)據(jù)庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù)封裝類;步驟2)、接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查詢的數(shù)據(jù)庫,取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。
【專利說明】
一種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法和系統(tǒng)
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于計(jì)算機(jī)領(lǐng)域,涉及一種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法和系統(tǒng)。
【背景技術(shù)】
[0002] 數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁應(yīng)用程序中 體現(xiàn)得尤為突出。一個簡單的數(shù)據(jù)庫應(yīng)用,由于對于數(shù)據(jù)庫的訪問不是很頻繁。這時可以簡 單地在需要訪問數(shù)據(jù)庫時,就新創(chuàng)建一個連接,用完后就關(guān)閉它,這樣做也不會帶來什么明 顯的性能上的開銷。但是對于一個復(fù)雜的數(shù)據(jù)庫應(yīng)用,情況就完全不同了。頻繁的建立、關(guān) 閉連接,會極大的減低系統(tǒng)的性能,因?yàn)閷τ谶B接的使用成了系統(tǒng)性能的瓶頸。對數(shù)據(jù)庫連 接的管理能顯著影響到整個應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫 連接池正是針對這個問題提出來的。
[0003] 連接池基本的思想是在系統(tǒng)初始化的時候,將數(shù)據(jù)庫連接作為對象存儲在內(nèi)存 中,當(dāng)用戶需要訪問數(shù)據(jù)庫時,并非建立一個新的連接,而是從連接池中取出一個已建立的 空閑連接對象。使用完畢后,用戶也并非將連接關(guān)閉,而是將連接放回連接池中,以供下一 個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。同時,還可以通過設(shè)置連接 池的參數(shù)來控制連接池中的初始連接數(shù)、連接的上下限數(shù)以及每個連接的最大使用次數(shù)、 最大空閑時間等等。也可以通過其自身的管理機(jī)制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。
[0004] 目前使用較廣泛的數(shù)據(jù)庫連接池實(shí)現(xiàn)是在內(nèi)部對象池中維護(hù)一定數(shù)量的數(shù)據(jù)庫 連接,并對外暴露數(shù)據(jù)庫連接獲取和返回方法。外部使用者可通過getConnection方法獲取 連接,使用完畢后再通過releaseConnection方法將連接返回,注意此時連接并沒有關(guān)閉, 而是由連接池管理器回收,并為下一次使用做好準(zhǔn)備。能翻閱到的資料中大多介紹的是 java或c#的數(shù)據(jù)庫連接池實(shí)現(xiàn),c/c++的實(shí)現(xiàn)多數(shù)是針對mysql的連接進(jìn)行的管理。
[0005] 現(xiàn)有技術(shù)中針對pgsql進(jìn)行數(shù)據(jù)庫連接池的實(shí)現(xiàn)較少,就算實(shí)現(xiàn),大多數(shù)都是依 照網(wǎng)絡(luò)上較廣泛的數(shù)據(jù)庫連接池返利進(jìn)行的實(shí)現(xiàn)。
【發(fā)明內(nèi)容】
[0006] 本方案摒棄了網(wǎng)絡(luò)主流的數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,適用c++的一些特性來提升了 數(shù)據(jù)庫連接池的易用性。
[0007] 本發(fā)明解決以上技術(shù)問題所采取的技術(shù)方案如下:
[0008] -種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,包括:
[0009] 步驟1)使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝;
[0010] 其中,數(shù)據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連 接池連接的數(shù)據(jù)庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù) 封裝類;
[0011] 步驟2)、接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查詢的數(shù) 據(jù)庫,取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。
[0012]進(jìn)一步地,優(yōu)選的是,步驟1)具體包括:將數(shù)據(jù)庫中的Dbpool類使用單例模式進(jìn)行 封裝,同時對增刪改查都進(jìn)行事務(wù)封裝,其中,調(diào)用的時候不需要考慮事務(wù)操作;
[0013] DbConn類封裝時,將Pgsql的基礎(chǔ)c函數(shù)進(jìn)行類封裝;DbResult類封裝時,將Pgsql 的查詢結(jié)果集PGresult進(jìn)行封裝;DbTrans封裝時,通過c++的特性使得數(shù)據(jù)庫連接池支持 事務(wù)操作。
[0014] 進(jìn)一步地,優(yōu)選的是,步驟2)中,所述查詢請求語句中包括:申請結(jié)果集和調(diào)用數(shù) 據(jù)庫連接池的查詢函數(shù),且查詢函數(shù)支持sql語句的拼接。
[0015] 進(jìn)一步地,優(yōu)選的是,同一進(jìn)程僅保留一個連接池。
[0016] 一種數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng),包括:
[0017] 初始化封裝單元,用于使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝;其 中,數(shù)據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連接池連接的 數(shù)據(jù)庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù)封裝類;
[0018] 查詢單元,用于接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查 詢的數(shù)據(jù)庫,取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。
[0019] 進(jìn)一步地,優(yōu)選的是,所述初始化封裝單元,進(jìn)一步用于將數(shù)據(jù)庫中的Dbpool類使 用單例模式進(jìn)行封裝,同時對增刪改查都進(jìn)行事務(wù)封裝,其中,調(diào)用的時候不需要考慮事務(wù) 操作;
[0020] DbConn類封裝時,將pgsql的基礎(chǔ)c函數(shù)進(jìn)行了類封裝;DbResult類封裝時,將 Pgsql的查詢結(jié)果集PGresult進(jìn)行封裝;DbTrans封裝時,通過c++的特性使得數(shù)據(jù)庫連接池 支持事務(wù)操作。
[0021] 進(jìn)一步地,優(yōu)選的是,所述查詢請求語句中包括:申請結(jié)果集和調(diào)用數(shù)據(jù)庫連接池 的查詢函數(shù),且查詢函數(shù)支持s q 1語句的拼接。
[0022]進(jìn)一步地,優(yōu)選的是,同一進(jìn)程僅保留一個連接池。
[0023]本發(fā)明使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行了封裝,既保證了連接的唯一性, 又簡化了調(diào)用的復(fù)雜性;使用可變參數(shù)的思想,對數(shù)據(jù)庫的增刪改查等操作僅需要調(diào)用一 個函數(shù)即可實(shí)現(xiàn);可自動回收的數(shù)據(jù)庫結(jié)果集;連接池支持事務(wù)操作,可以適用復(fù)雜邏輯的 處理。
[0024] 本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變 得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明 書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
【附圖說明】
[0025] 下面結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)的描述,以使得本發(fā)明的上述優(yōu)點(diǎn)更加明確。其 中,
[0026] 圖1是本發(fā)明數(shù)據(jù)庫連接池實(shí)現(xiàn)方法的流程示意圖;
[0027] 圖2是本發(fā)明實(shí)施例中數(shù)據(jù)庫連接封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0028] 圖3是本發(fā)明實(shí)施例中數(shù)據(jù)庫連接池封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0029] 圖4是本發(fā)明實(shí)施例中結(jié)果封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0030] 圖5是本發(fā)明實(shí)施例中是事務(wù)封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0031]圖6是是本發(fā)明實(shí)施例中查詢的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0032]圖7是是本發(fā)明實(shí)施例中查詢的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0033] 圖8是本發(fā)明數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0034] 以下將結(jié)合附圖及實(shí)施例來詳細(xì)說明本發(fā)明的實(shí)施方式,借此對本發(fā)明如何應(yīng)用 技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實(shí)現(xiàn)過程能充分理解并據(jù)以實(shí)施。需要說明 的是,只要不構(gòu)成沖突,本發(fā)明中的各個實(shí)施例以及各實(shí)施例中的各個特征可以相互結(jié)合, 所形成的技術(shù)方案均在本發(fā)明的保護(hù)范圍之內(nèi)。
[0035] 首先,對本發(fā)明涉及的英文縮寫和技術(shù)名詞進(jìn)行解釋。
[0036] pgsql = PostgreSQL是以加州大學(xué)伯克利分校計(jì)算機(jī)系開發(fā)的P0STGRES版本4.2為 基礎(chǔ)的對象關(guān)系型數(shù)據(jù)庫管理系統(tǒng);
[0037]數(shù)據(jù)庫連接池:數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序 重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;
[0038] 可變參數(shù):在c/c++函數(shù)中,參數(shù)個數(shù)可變的函數(shù),例如printfO這個函數(shù);
[0039] sql事務(wù):是指作為單個邏輯工作單元執(zhí)行的一系列操作,要么完全地執(zhí)行,要么 完全地不執(zhí)行;
[0040] 析構(gòu)函數(shù):與構(gòu)造函數(shù)相反,當(dāng)對象脫離其作用域時(例如對象所在的函數(shù)已調(diào)用 完畢),系統(tǒng)自動執(zhí)行析構(gòu)函數(shù)。
[0041] 實(shí)施例一:
[0042] 一種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,包括:
[0043] 步驟1)使用c++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝;
[0044] 其中,數(shù)據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連 接池連接的數(shù)據(jù)庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù) 封裝類;
[0045] 步驟2)、接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查詢的數(shù) 據(jù)庫,取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。
[0046]進(jìn)一步地,優(yōu)選的是,步驟1)具體包括:將數(shù)據(jù)庫中的Dbpool類使用單例模式進(jìn)行 封裝,同時對增刪改查都進(jìn)行事務(wù)封裝,其中,調(diào)用的時候不需要考慮事務(wù)操作;
[0047] DbConn類封裝時,將Pgsql的基礎(chǔ)c函數(shù)進(jìn)行類封裝;DbResult類封裝時,將Pgsql 的查詢結(jié)果集PGresult進(jìn)行封裝;DbTrans封裝時,通過c++的特性使得數(shù)據(jù)庫連接池支持 事務(wù)操作。
[0048] 進(jìn)一步地,優(yōu)選的是,步驟2)中,所述查詢請求語句中包括:申請結(jié)果集和調(diào)用數(shù) 據(jù)庫連接池的查詢函數(shù),且查詢函數(shù)支持sql語句的拼接。
[0049] 本發(fā)明使用c++的單例模式對數(shù)據(jù)庫連接池進(jìn)行了封裝,既保證了連接的唯一性, 又簡化了調(diào)用的復(fù)雜性;使用可變參數(shù)的思想,對數(shù)據(jù)庫的增刪改查等操作僅需要調(diào)用一 個函數(shù)即可實(shí)現(xiàn);可自動回收的數(shù)據(jù)庫結(jié)果集;連接池支持事務(wù)操作,可以適用復(fù)雜邏輯的 處理。
[0050] 實(shí)施例二:
[0051] 如圖2所示,本發(fā)明的連接池的整體運(yùn)行流程如其所示,其中,本方案關(guān)鍵點(diǎn)在于 調(diào)用簡單,整個連接池支持事務(wù)調(diào)用。
[0052] 具體來說,本方案設(shè)計(jì)的連接池僅需要在程序開始后進(jìn)行一次初始化,則整個程 序的生命周期內(nèi)連接池都一直存活,當(dāng)程序退出時,利用C++的特性自動調(diào)用析構(gòu)函數(shù)會自 動釋放數(shù)據(jù)庫連接池的資源。
[0053]其中,數(shù)據(jù)庫連接池的初始化方式如下:
[0054] DbPool::GetInstance()->Init(PG_DEFAULT_INIT_SIZE,PG_DEFAULT_MAX_SIZE, PG_DATABASE_NAME);
[0055] PG_DEFAULT_INIT_SIZE為連接池初始連接數(shù);
[0056] PG_DEFAULT_MAX_SIZE為連接池最大連接數(shù);
[0057] PG_DATABASE_NAME為連接池連接的數(shù)據(jù)庫名稱;
[0058] 簡易數(shù)據(jù)庫連接池模型封裝類如下圖:
[0059] 如圖2所示,數(shù)據(jù)庫連接封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0060] 如圖3所示,數(shù)據(jù)庫連接池封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0061 ]如圖4所示,結(jié)果封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0062] 如圖5所示,是事務(wù)封裝類的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0063] Dbpool類使用單例模式進(jìn)行的封裝,并且對增刪改查都進(jìn)行了事務(wù)的封裝,調(diào)用 的時候不需要考慮事務(wù)操作,DbConn類則將pgsql的基礎(chǔ)c函數(shù)進(jìn)行了類的封裝,DbResult 將pgsql的查詢結(jié)果集PGresult進(jìn)行了封裝,DbTrans則通過c++的特性使得數(shù)據(jù)庫連接池 支持事務(wù)操作。
[0064] 舉個簡單的例子,我們有一個數(shù)據(jù)庫表test,內(nèi)容如圖7所示,其為test表內(nèi)容。其 中,此時我們想要查詢張三的手機(jī)號,則只需要按照如下方式查詢即可:
[0065] string tel; DbResu丨Ldb_res;//申請結(jié)果集 DbPool::Getinstance()->r:xecQuery(&db_ res, "select tel from test where 腿me='%sm, "張三");//進(jìn)行查詢 ir(db_res,Nexi〇) { tel = db_res.GetSiring("tel"): } _
[0066] 以往的數(shù)據(jù)庫連接池需要申請資源,然后再釋放資源,查詢的語句需要提前進(jìn)行 語句拼接,然后才能調(diào)用查詢函數(shù),本案的數(shù)據(jù)庫連接池簡化了這個查詢的步驟,僅僅需要 兩個語句,申請結(jié)果集,調(diào)用數(shù)據(jù)庫連接池的查詢函數(shù)即可,查詢函數(shù)支持sql語句的拼接, 簡單易用。
[0067] 當(dāng)查出張三手機(jī)號碼后,我們發(fā)現(xiàn)并非是他現(xiàn)在在用的手機(jī)號,則我們僅需要調(diào) 用一個語句就可以將張三號碼進(jìn)行修改,修改方式如下:
[0068] DbPool::GetInstance()->ExecQuery(^update test set tel ='%s'where name = ' % s '〃,〃13245898754〃,〃張三");
[0069] 此時的數(shù)據(jù)庫數(shù)據(jù)則改為了如下內(nèi)容,如圖8所示:
[0070] 對于insert和delete語句的操作都可以參照更新操作,此處不做介紹。
[0071]下面再舉一個例子,張三在網(wǎng)購,購買了 50元的商品,可是當(dāng)他已經(jīng)完成付款后系 統(tǒng)出現(xiàn)了故障,此時如果張三的金額已經(jīng)更新為50了,我們需要將他的金額再恢復(fù)原來的 值,這個時候就需要用到事務(wù)操作了。
[0072] 代碼如下:
[0073] DbTrans db_trans; db-trans.Execrupdate test set money=%d where name='%s'",50,π,張三"); if (出現(xiàn)故障): db_trans.Rollback();
[0074] }
[0075] 在出現(xiàn)故障的時候,我們僅需要調(diào)用一次Rollback函數(shù),則張三的金額又會變?yōu)?事務(wù)之前的金額,如果沒有出現(xiàn)故障,則db_trans生命周期結(jié)束后,析構(gòu)函數(shù)會自動將此次 事務(wù)提交,則張三的此次交易成功結(jié)束。
[0076] 詳細(xì)如圖6和7所示。
[0077] 本提案的關(guān)鍵點(diǎn)是通過c++單例模式進(jìn)行了數(shù)據(jù)庫連接池的封裝,簡化了連接池 的調(diào)用方法,且保證了同一進(jìn)程僅保留一個連接池實(shí)例;通過可變參數(shù)的思維,在調(diào)用數(shù)據(jù) 增刪改查的函數(shù)時,可以更簡單清晰的進(jìn)行sql語句的拼接,可以更加簡單高效的進(jìn)行接口 調(diào)用。
[0078] 本提案的數(shù)據(jù)庫連接池不僅保留了傳統(tǒng)數(shù)據(jù)庫連接池的初始化大小,最大限制大 小等優(yōu)點(diǎn),更結(jié)合了在產(chǎn)品使用過程中的使用習(xí)慣和c++良好的代碼封裝性,是的接口調(diào)用 更加簡單,邏輯更加清晰,且創(chuàng)新的在數(shù)據(jù)庫連接池中加入了事務(wù)支持,較以往傳統(tǒng)的使用 申請新的數(shù)據(jù)庫連接資源進(jìn)行事務(wù)操作要更加優(yōu)越。
[0079] 本提案的保護(hù)點(diǎn)一是使用單例模式進(jìn)行封裝,簡化了接口調(diào)用;二是支持可變參 數(shù)的函數(shù)調(diào)用方式;三是支持事務(wù)的數(shù)據(jù)庫連接池設(shè)計(jì)思路;四是對本案的全部源碼進(jìn)行 專利保護(hù)。
[0080] 該方案除了滿足基本數(shù)據(jù)庫連接池的功能外,在接口調(diào)用上較傳統(tǒng)的數(shù)據(jù)庫連接 池更加簡單,對于查詢最少僅需兩行代碼,增刪改最少僅需一行代碼,且使用可變參數(shù)的調(diào) 用方式,使得sql語句看起來更加清晰易懂,這可以大大節(jié)省開發(fā)成本和維護(hù)成本。
[0081] 傳統(tǒng)的數(shù)據(jù)庫連接池不支持事務(wù)操作,本案的數(shù)據(jù)庫連接池結(jié)合了 c++的特性,可 以完美支持?jǐn)?shù)據(jù)庫連接池的事務(wù)操作,可以廣泛應(yīng)用于系統(tǒng)復(fù)雜性高,流程復(fù)雜且需要數(shù) 據(jù)庫事務(wù)操作的產(chǎn)品中,使數(shù)據(jù)庫操作更加穩(wěn)定高效。
[0082] 實(shí)施例三:
[0083]與以上方法實(shí)施例相對應(yīng),本發(fā)明還提供了一種數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng),如圖8所 示,包括:初始化封裝單元,用于使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝;其 中,數(shù)據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連接池連接的 數(shù)據(jù)庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù)封裝類;
[0084] 查詢單元,用于接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查 詢的數(shù)據(jù)庫,取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。
[0085] 進(jìn)一步地,優(yōu)選的是,所述初始化封裝單元,進(jìn)一步用于將數(shù)據(jù)庫中的Dbpool類使 用單例模式進(jìn)行封裝,同時對增刪改查都進(jìn)行事務(wù)封裝,其中,調(diào)用的時候不需要考慮事務(wù) 操作;
[0086] DbConn類封裝時,將pgsql的基礎(chǔ)c函數(shù)進(jìn)行了類封裝;DbResult類封裝時,將 Pgsql的查詢結(jié)果集PGresult進(jìn)行封裝;DbTrans封裝時,通過c++的特性使得數(shù)據(jù)庫連接池 支持事務(wù)操作。
[0087] 進(jìn)一步地,優(yōu)選的是,所述查詢請求語句中包括:申請結(jié)果集和調(diào)用數(shù)據(jù)庫連接池 的查詢函數(shù),且查詢函數(shù)支持s q 1語句的拼接。
[0088] 進(jìn)一步地,優(yōu)選的是,同一進(jìn)程僅保留一個連接池。
[0089]本發(fā)明使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行了封裝,既保證了連接的唯一性, 又簡化了調(diào)用的復(fù)雜性;使用可變參數(shù)的思想,對數(shù)據(jù)庫的增刪改查等操作僅需要調(diào)用一 個函數(shù)即可實(shí)現(xiàn);可自動回收的數(shù)據(jù)庫結(jié)果集;連接池支持事務(wù)操作,可以適用復(fù)雜邏輯的 處理。
[0090] 需要說明的是,對于上述方法實(shí)施例而言,為了簡單描述,故將其都表述為一系列 的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動作順序的限制,因?yàn)?依據(jù)本申請,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知 悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動作和模塊并不一定是本申請 所必須的。
[0091] 本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序 產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí) 施例的形式。
[0092] 最后應(yīng)說明的是:以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明, 盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,對于本領(lǐng)域的技術(shù)人員來說,其依然可 以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換。 凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的 保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,其特征在于,包括: 步驟1)使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝; 其中,數(shù)據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連接池 連接的數(shù)據(jù)庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù)封裝 類; 步驟2)、接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查詢的數(shù)據(jù)庫, 取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。2. 根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,其特征在于,步驟1具體包括:將數(shù)據(jù) 庫中的Dbpool類使用單例模式進(jìn)行封裝,同時對增刪改查都進(jìn)行事務(wù)封裝,其中,調(diào)用的時 候不需要考慮事務(wù)操作; DbConn類封裝時,將pgsql的基礎(chǔ)c函數(shù)進(jìn)行類封裝;DbResult類封裝時,將pgsql的查 詢結(jié)果集PGresult進(jìn)行封裝;DbTrans封裝時,通過C++的特性使得數(shù)據(jù)庫連接池支持事務(wù) 操作。3. 根據(jù)權(quán)利要求1或2所述的數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,其特征在于,步驟2)中,所述查詢 請求語句中包括:申請結(jié)果集和調(diào)用數(shù)據(jù)庫連接池的查詢函數(shù),且查詢函數(shù)支持sql語句的 拼接。4. 根據(jù)權(quán)利要求1或2所述的數(shù)據(jù)庫連接池實(shí)現(xiàn)方法,其特征在于,同一進(jìn)程僅保留一 個連接池。5. -種數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng),其特征在于,包括: 初始化封裝單元,用于使用C++的單例模式對數(shù)據(jù)庫連接池進(jìn)行初始化封裝;其中,數(shù) 據(jù)庫連接池初始化時,設(shè)定連接池初始化連接數(shù)、連接池最大連接數(shù)和連接池連接的數(shù)據(jù) 庫名稱,同時形成數(shù)據(jù)庫封裝類、數(shù)據(jù)庫連接池封裝類、結(jié)果封裝類、事務(wù)封裝類; 查詢單元,用于接收用戶對數(shù)據(jù)庫的查詢請求,并從查詢請求語句中獲取需要查詢的 數(shù)據(jù)庫,取出數(shù)據(jù)結(jié)果,向用戶返回查詢結(jié)果。6. 根據(jù)權(quán)利要求5所述的數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng),其特征在于,所述初始化封裝單元, 進(jìn)一步用于將數(shù)據(jù)庫中的Dbpool類使用單例模式進(jìn)行封裝,同時對增刪改查都進(jìn)行事務(wù)封 裝,其中,調(diào)用的時候不需要考慮事務(wù)操作; DbConn類封裝時,將pgsql的基礎(chǔ)c函數(shù)進(jìn)行了類封裝;DbResult類封裝時,將pgsql的 查詢結(jié)果集PGresult進(jìn)行封裝;DbTrans封裝時,通過C++的特性使得數(shù)據(jù)庫連接池支持事 務(wù)操作。7. 根據(jù)權(quán)利要求5或6所述的數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng),其特征在于,所述查詢請求語句 中包括:申請結(jié)果集和調(diào)用數(shù)據(jù)庫連接池的查詢函數(shù),且查詢函數(shù)支持sql語句的拼接。8. 根據(jù)權(quán)利要求5或6所述的數(shù)據(jù)庫連接池實(shí)現(xiàn)系統(tǒng),其特征在于,同一進(jìn)程僅保留一 個連接池。
【文檔編號】G06F17/30GK105843874SQ201610158063
【公開日】2016年8月10日
【申請日】2016年3月18日
【發(fā)明人】馬涌
【申請人】山東華軟金盾軟件股份有限公司