專利名稱::一種批量數(shù)據(jù)操作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及電數(shù)字?jǐn)?shù)據(jù)處理領(lǐng)域,特別涉及批量數(shù)據(jù)操作方法。
背景技術(shù):
:在應(yīng)用程序中,經(jīng)常會(huì)需要對(duì)數(shù)據(jù)庫進(jìn)行大量的批量操作和處理,特別是比較復(fù)雜的大型應(yīng)用系統(tǒng),對(duì)性能要求非常高,通過使用批量操作接口可以允許在同一個(gè)數(shù)據(jù)庫事務(wù)執(zhí)行所有的數(shù)據(jù)庫操作語句而不是執(zhí)行對(duì)數(shù)據(jù)庫的一系列調(diào)用,通過這種方式可以減少大量的數(shù)據(jù)庫連接和操作處理,可以極大的提升系統(tǒng)的性能。目前一般的近似實(shí)現(xiàn)方案是通過直接使用jdbcbatch接口來進(jìn)行數(shù)據(jù)的批量操作。圖1示出現(xiàn)有技術(shù)的一種處理流程,包括步驟Sll、獲取數(shù)據(jù)庫連接;步驟S12、創(chuàng)造語句(statement)對(duì)象;步驟S13、構(gòu)造需要執(zhí)行的完整sql語句;步驟S14、將需要執(zhí)行的sql語句增加到語句對(duì)象的批量語句列表中;步驟S15、判斷是否已將所有sql語句都增加到語句對(duì)象的批量語句列表中,已增加所有sql語句則進(jìn)行步驟S16,否則返回進(jìn)行步驟S13;步驟S16、在語句對(duì)象上執(zhí)行批量處理動(dòng)作,訪問數(shù)據(jù)庫并執(zhí)行批量語句;步驟S17、關(guān)閉語句對(duì)象和數(shù)據(jù)庫連接,處理流程結(jié)束。采用現(xiàn)有技術(shù),使用jdbcdriver—類做數(shù)據(jù)庫批量操作通常是不透明的,且違背oo(面向?qū)ο?處理方式,在orma卯ing(對(duì)象關(guān)系映射技術(shù))一類實(shí)現(xiàn)中尤其明顯。
發(fā)明內(nèi)容本發(fā)明目的在于提供一種處理批量數(shù)據(jù)庫操作的批量數(shù)據(jù)操作方法。本發(fā)明提供一種批量數(shù)據(jù)操作方法,包括根據(jù)數(shù)據(jù)庫連接對(duì)象產(chǎn)生批量連接對(duì)象的步驟;生成批量語句對(duì)象的步驟;執(zhí)行數(shù)據(jù)庫語句的步驟。優(yōu)選地,上述根據(jù)數(shù)據(jù)庫連接對(duì)象產(chǎn)生批量連接對(duì)象的步驟包括獲取數(shù)據(jù)庫連接對(duì)象的步驟;根據(jù)數(shù)據(jù)庫連接對(duì)象封裝構(gòu)造批量連接對(duì)象的步驟;返回批量連接對(duì)象的步驟。優(yōu)選地,上述生成批量語句對(duì)象的步驟包括準(zhǔn)備數(shù)據(jù)庫語句,構(gòu)造批量語句對(duì)象的步驟;將數(shù)據(jù)庫語句增加到批量命令列表中的步驟;關(guān)閉批量連接對(duì)象的步驟;關(guān)閉批量語句對(duì)象的步驟。優(yōu)選地,上述執(zhí)行數(shù)據(jù)庫語句的步驟包括執(zhí)行批量處理任務(wù)的步驟;關(guān)閉批量語句對(duì)象包含的語句對(duì)象的步驟。優(yōu)選地,上述批量連接對(duì)象對(duì)數(shù)據(jù)庫的連接和會(huì)話提供數(shù)據(jù)庫的描述信息,封裝數(shù)據(jù)庫連接,將數(shù)據(jù)的執(zhí)行請(qǐng)求委托給批量語句對(duì)象統(tǒng)一集中處理。優(yōu)選地,上述批量語句對(duì)象保存預(yù)先編譯好的數(shù)據(jù)庫批量執(zhí)行語句,對(duì)于分別傳遞并保存多次執(zhí)行的參數(shù),統(tǒng)一進(jìn)行一次數(shù)據(jù)庫訪問。上述批量連接對(duì)象繼承預(yù)編譯語句對(duì)象接口的方法,方法返回批量語句對(duì)象的實(shí)例,執(zhí)行語句時(shí)調(diào)用預(yù)編譯語句對(duì)象接口的addBatch接口,將語句增加到JDBCAPI批量處理-接口,并標(biāo)志批量處理。當(dāng)上述批量連接對(duì)象執(zhí)行關(guān)閉動(dòng)作時(shí),遍歷此批量連接對(duì)象的所有批量語句對(duì)象,并依次執(zhí)行批量語句對(duì)象的關(guān)閉語句行為,在關(guān)閉批量語句對(duì)象時(shí),直接調(diào)用JDBCAPI的批量處理方法進(jìn)行數(shù)據(jù)庫的實(shí)際訪問和語句執(zhí)行。本發(fā)明提供的批量數(shù)據(jù)操作方法,可以通過面向?qū)ο蟮姆绞教幚砼科鄑據(jù)庫操作;同時(shí)作透明化處理,增加應(yīng)用程序?qū)?shù)據(jù)庫批量操作的透明性,用戶和應(yīng)用程序不需要了解和關(guān)心driver的具體細(xì)節(jié);還可增強(qiáng)部分jdbcdriver操作。圖i是本發(fā)明現(xiàn)有技術(shù)的一種處理流程示意圖;圖2是本發(fā)明第一實(shí)施例的對(duì)象關(guān)系圖;圖3是本發(fā)明第一實(shí)施例的處理序列圖;圖4是本發(fā)明第一實(shí)施例的工作流程示意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。具體實(shí)施例方式本實(shí)施例提出基于Java數(shù)據(jù)庫連接驅(qū)動(dòng)器(以下簡稱JDBCDriver)通過封裝和攔截JDBC的API來提供透明性的批量數(shù)據(jù)操作。本實(shí)施例定義并封裝兩個(gè)類,一個(gè)是批量連接對(duì)象(BatchConnection),另一個(gè)是批量語句對(duì)象(BatchPr印aredStatement)。其中批量連接對(duì)象對(duì)某個(gè)凄t據(jù)庫的連接和會(huì)話提供數(shù)據(jù)庫的一些描述信息,包括表信息,支持的數(shù)據(jù)庫語法等。批量連接對(duì)象封裝了普通數(shù)據(jù)庫連接,將數(shù)據(jù)的執(zhí)行請(qǐng)求委托給批量語句對(duì)象統(tǒng)一集中處理。而批量語句對(duì)象保存已經(jīng)預(yù)先編譯好的數(shù)據(jù)庫批量執(zhí)行語句,多次執(zhí)行只需要傳遞參數(shù),并將參數(shù)保存下來,最終只需進(jìn)行一次實(shí)際數(shù)據(jù)庫訪問即可,可以極大"t是高^l行效率。批量連接對(duì)象和批量語句對(duì)象與JDBCDriver的對(duì)象關(guān)系如圖2所示,預(yù)編i奪語句對(duì)象接口(PreparedStatement)提供預(yù)編譯語句的實(shí)現(xiàn)規(guī)范,數(shù)據(jù)庫連接接口(Connection)提供與數(shù)據(jù)庫連接的實(shí)現(xiàn)規(guī)范,批量連接對(duì)象和批量語句對(duì)象遵循Decorator(裝飾器)模式,直接實(shí)現(xiàn)JDBCDriver相關(guān)接口,并包裹相關(guān)的JDBCAPI,攔截和修改JDBCAPI相關(guān)4亍為,攔截部分jdbcdriver^喿作,并且增強(qiáng)部分jdbcdriver操作的批量處理、使用方式和性能。JDBC由兩層構(gòu)成,第一層稱為JDBCAPI,第二層JDBC管理器驅(qū)動(dòng)程序API,JDBCAPI將SQL命令傳達(dá)到JDBC管理器驅(qū)動(dòng)程序API。JDBC管理器應(yīng)該與各種實(shí)際連接到數(shù)據(jù)庫的第三方驅(qū)動(dòng)程序通信,然后返回查詢信息或者執(zhí)行由查詢指定的操作。Java代碼將SQL語句作為函數(shù)調(diào)用傳遞給DB2JDBC驅(qū)動(dòng)程序。然后,驅(qū)動(dòng)程序處理來自客戶才幾Java代碼的JDBCAPI調(diào)用。本實(shí)施例提出的批量連接對(duì)象和批量語句對(duì)象是JDBC驅(qū)動(dòng)數(shù)據(jù)庫連接接口和預(yù)編譯語句對(duì)象接口的一個(gè)特殊實(shí)現(xiàn)。結(jié)合圖3,本實(shí)施例的處理序列為獲取一個(gè)批量連接對(duì)象實(shí)例,獲取此實(shí)例后可以直接獲取預(yù)編譯語句對(duì)象接口的方法,此方法直接返回一個(gè)批量語句對(duì)象的實(shí)例,當(dāng)執(zhí)行批量語句對(duì)象時(shí)實(shí)際上并不實(shí)際直接訪問數(shù)據(jù)庫,而是調(diào)用預(yù)編譯語句對(duì)象接口的addBatch接口,將此語句增加到JDBCAPI批量處理接口,同時(shí)批量語句對(duì)象檢查是否有批量操作,當(dāng)發(fā)現(xiàn)有批量操作時(shí)就在內(nèi)部設(shè)置批量處理標(biāo)志,這樣后續(xù)可以根據(jù)批量處理標(biāo)志來判斷是否需要馬上執(zhí)行操作,如果存在批量處理標(biāo)志則一直等待批量連接對(duì)象關(guān)閉的時(shí)候才集中執(zhí)行一次數(shù)據(jù)庫操作;如果不存在批量處理標(biāo)志,則采用現(xiàn)有技術(shù)執(zhí)行數(shù)據(jù)庫操作。當(dāng)批量連接對(duì)象執(zhí)行關(guān)閉動(dòng)作時(shí),遍歷此批量連接對(duì)象的所有批量語句對(duì)象,并依次執(zhí)行批量語句對(duì)象的關(guān)閉語句行為,在關(guān)閉批量語句對(duì)象時(shí),直接調(diào)用JDBCAPI的批量處理方法進(jìn)行數(shù)據(jù)庫的實(shí)際訪問和語句執(zhí)行。上述預(yù)編譯語句對(duì)象接口的addBatch接口用于增加sq1語句命令到批量處理列表里面,以便后續(xù)預(yù)編譯語句對(duì)象一次執(zhí)行所有語句命令。參照?qǐng)D4,本實(shí)施例的工作流程包括步驟S21、獲取普通數(shù)據(jù)庫連接對(duì)象;步驟S22、通過產(chǎn)生的數(shù)據(jù)庫連接對(duì)象,封裝構(gòu)造出一個(gè)批量連接對(duì)象,返回一個(gè)批量連接對(duì)象;步驟S23、構(gòu)造sql語句,構(gòu)造批量語句對(duì)象;步驟S24、將sql語句增加到批量語句對(duì)象批量列表中,當(dāng)發(fā)現(xiàn)有批量操作時(shí)就在內(nèi)部設(shè)置批量處理標(biāo)志;步驟S25、關(guān)閉批量連接對(duì)象;步驟S26、執(zhí)行批量連接對(duì)象關(guān)聯(lián)的批量語句對(duì)象的關(guān)閉動(dòng)作;步驟S27、批量語句對(duì)象執(zhí)行關(guān)閉;步驟S28、檢測(cè)批量處理標(biāo)志,如果存在批量處理標(biāo)志,則進(jìn)行步驟S29,否則進(jìn)4亍步驟S210;步驟S29,執(zhí)行批量處理任務(wù),訪問數(shù)據(jù)庫進(jìn)行數(shù)據(jù)庫操作;步驟S210,直接關(guān)閉數(shù)據(jù)庫連接和語句;步驟S211、關(guān)閉批量語句對(duì)象包含的語句對(duì)象,流程結(jié)束。將上述工作流程整理如表l所示,對(duì)使用者來說只需要知道批量連接對(duì)象即可,其他的操作和;f亍為對(duì)使用者都是透明的。<table>tableseeoriginaldocumentpage7</column></row><table>表1本發(fā)明還可應(yīng)用于除Java數(shù)據(jù)庫連接驅(qū)動(dòng)器之外的其他多種數(shù)據(jù)庫連接驅(qū)動(dòng)器,處理逸程與上述實(shí)施例類似,故不贅述。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的
技術(shù)領(lǐng)域:
,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。權(quán)利要求1.一種批量數(shù)據(jù)操作方法,包括根據(jù)數(shù)據(jù)庫連接對(duì)象產(chǎn)生批量連接對(duì)象的步驟;生成批量語句對(duì)象的步驟;執(zhí)行數(shù)據(jù)庫語句的步驟。2.根據(jù)權(quán)利要求l所述的批量數(shù)據(jù)操作方法,其特征在于,所述根據(jù)數(shù)據(jù)庫連"l妻對(duì)象產(chǎn)生批量連接對(duì)象的步驟包括獲取數(shù)據(jù)庫連接對(duì)象的步驟;根據(jù)數(shù)據(jù)庫連接對(duì)象封裝構(gòu)造批量連接對(duì)象的步驟;返回批量連接對(duì)象的步驟。3.根據(jù)權(quán)利要求l所述的批量數(shù)據(jù)操作方法,其特征在于,所述生成批量語句對(duì)象的步驟包括準(zhǔn)備數(shù)據(jù)庫語句,構(gòu)造批量語句對(duì)象的步驟;將數(shù)據(jù)庫語句增加到批量命令列表中的步驟;關(guān)閉批量連接對(duì)象的步驟;關(guān)閉批量語句對(duì)象的步驟。4.根據(jù)權(quán)利要求l所述的批量數(shù)據(jù)操作方法,其特征在于,所述執(zhí)行數(shù)據(jù)庫語句的步驟包括執(zhí)行批量處理任務(wù)的步驟;關(guān)閉批量語句對(duì)象包含的語句對(duì)象的步驟。5.根據(jù)權(quán)利要求1至4任意一項(xiàng)所述的批量數(shù)據(jù)操作方法,其特征在于,所述批量連接對(duì)象對(duì)數(shù)據(jù)庫的連接和會(huì)話提供數(shù)據(jù)庫的描述信息,封裝數(shù)據(jù)庫連接,將數(shù)據(jù)的執(zhí)行請(qǐng)求委托給批量語句對(duì)象統(tǒng)一集中處理。6.根據(jù)權(quán)利要求1至4任意一項(xiàng)所述的批量數(shù)據(jù)操作方法,其特征在于,所述批量語句對(duì)象保存預(yù)先編譯好的數(shù)據(jù)庫批量執(zhí)行語句,對(duì)于分別傳遞并保存多次執(zhí)行的參數(shù),統(tǒng)一進(jìn)行一次數(shù)據(jù)庫訪問。7.根據(jù)權(quán)利要求1至4任意一項(xiàng)所述的批量數(shù)據(jù)操作方法,其特征在于,所述批量連接對(duì)象繼承預(yù)編譯語句對(duì)象接口的方法,所述方法返回批量語句對(duì)象的實(shí)例,執(zhí)行所述語句時(shí)調(diào)用預(yù)編譯語句對(duì)象接口的addBatch接口,將所述語句增加到JDBCAPI批量處理接口,并標(biāo)志批量處理。8.根據(jù)權(quán)利要求1至4任意一項(xiàng)所述的批量數(shù)據(jù)操作方法,其特征在于,當(dāng)所述批量連接對(duì)象執(zhí)行關(guān)閉動(dòng)作時(shí),遍歷此批量連接對(duì)象的所有批量語句對(duì)象,并依次執(zhí)行所述批量語句對(duì)象的關(guān)閉語句行為,在關(guān)閉批量語句對(duì)象時(shí),直接調(diào)用JDBCAPI的批量處理方法進(jìn)行數(shù)據(jù)庫的實(shí)際訪問和語句執(zhí)行。全文摘要本發(fā)明提供一種批量數(shù)據(jù)操作方法,包括根據(jù)數(shù)據(jù)庫連接對(duì)象產(chǎn)生批量連接對(duì)象的步驟;生成批量語句對(duì)象的步驟;執(zhí)行數(shù)據(jù)庫語句的步驟。本發(fā)明提供的批量數(shù)據(jù)操作方法,可以通過面向?qū)ο蟮姆绞教幚砼繑?shù)據(jù)庫操作;同時(shí)作透明化處理,增加應(yīng)用程序?qū)?shù)據(jù)庫批量操作的透明性,用戶和應(yīng)用程序不需要了解和關(guān)心driver的具體細(xì)節(jié);還可增強(qiáng)部分jdbcdriver操作。文檔編號(hào)G06F9/44GK101436184SQ20071017037公開日2009年5月20日申請(qǐng)日期2007年11月15日優(yōu)先權(quán)日2007年11月15日發(fā)明者璐彭,銀龔申請(qǐng)人:金蝶軟件(中國)有限公司