專利名稱::一種文件打包解包的方法
技術領域:
:本發(fā)明涉及計算機
技術領域:
,尤其涉及一種文件打包解包的方法。
背景技術:
:在大型企業(yè)應用中,數(shù)據(jù)庫分布部署在世界各地。經(jīng)常需要把大量數(shù)據(jù)從一個數(shù)據(jù)庫同步到另一個數(shù)據(jù)庫。通常的設計思想是,首先從源數(shù)據(jù)庫讀取數(shù)據(jù),打包生成文件,然后通過消息中間件,把文件傳輸?shù)疆惖?,在異地接收后,生成文件,解包程序把文件解析到目的?shù)據(jù)庫中。當源數(shù)據(jù)庫中增加新表,需要同步到目的數(shù)據(jù)庫中時,需要開發(fā)新的"生成文件的程序"和"解析文件的程序",導致開發(fā)成本高,且變動風險大。
發(fā)明內容本發(fā)明要解決的技術問題在于,針對現(xiàn)有技術的上述缺陷,提供一種文件的打包解包的方法,使得在源數(shù)據(jù)庫中增加新表需要同步時,不需要重新開發(fā)新的"生成文件的程序"和"解析文件的程序",更具備擴展性和可維護性。本發(fā)明解決其技術問題所采用的技術方案是構造一種文件打包解包的方法,其包括以下步驟A、報文生成器將源數(shù)據(jù)庫中需要打包的單表中的數(shù)據(jù)打包,生成一個文件,放到指定文件夾中;將需要打包的主從表的主表和從表中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中,將需要打包的單表數(shù)據(jù)分類打包,生成不同的文件,分別放到動態(tài)生成的文件夾中;B、報文解析器從所述指定文件夾中,讀取單表中的數(shù)據(jù)打包的文件,解析后,將其中每條記錄寫入到目的數(shù)據(jù)庫相應的單表中,并從指定文件夾中,讀取主從表中的數(shù)據(jù)打包生成的文件,解析后,將主表和從表中的信息同時寫入到目的數(shù)據(jù)庫相應的主表和從表中。本發(fā)明所述的文件打包解包的方法,其中,所述步驟Al包括A11、配置SQL語句關鍵字字段和SQL語句關鍵字對應文件夾后綴的參數(shù),根據(jù)該SQL語句關鍵字字段對需要打包的信息數(shù)據(jù)集進行分離,再根據(jù)SQL語句關鍵字字段與SQL語句關鍵字對應文件夾后綴的值動態(tài)創(chuàng)建文件夾,把分離后的數(shù)據(jù)集分別放入動態(tài)創(chuàng)建的文件夾中。本發(fā)明所述的文件打包解包的方法,其中,所述步驟A之前,包括步驟A0、查找打包SQL列表,查找第一條SQL參數(shù),判斷是否在打包時間段,如果是,則執(zhí)行打包前主SQL,執(zhí)行打包主SQL,查找子SQL,執(zhí)行打包前子SQL,執(zhí)行打包子SQL,獲取打包數(shù)據(jù);A01、根據(jù)表單類型判斷打包方式,分別進行打包。本發(fā)明所述的文件打包解包的方法,其中,所述步驟A之后包括步驟A02、執(zhí)行打包后子SQL,執(zhí)行打包后主SQL,刪除已經(jīng)打包過的數(shù)據(jù)。4本發(fā)明所述的文件打包解包的方法,其中,所述步驟B包括Bl、讀取指定文件夾中的XML文件,根據(jù)文件編號,讀取相應的SQL參數(shù);B2、根據(jù)SQL參數(shù)判斷經(jīng)打包的源數(shù)據(jù)庫中的表單是否存在主從表關系,根據(jù)判斷結果分別進行解析。本發(fā)明所述的文件打包解包的方法,其中,所述步驟B2包括B21、當經(jīng)打包的源數(shù)據(jù)庫中的表單不存在主從表關系時,直接讀取主表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,讀取XML文件中的主表數(shù)據(jù),解析為SQL語句;B22、執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句。本發(fā)明所述的文件打包解包的方法,其中,所述步驟B2包括B23、當經(jīng)打包的源數(shù)據(jù)庫中的表單存在主從表關系時,開啟事務,讀取主表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,讀取XML文件中的主表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句;B24、同時讀取子表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,讀取XML文件中的子表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句;B25、提交事務。本發(fā)明通過采用公共的報文生成器和報文解析器,通過配置表與表之間的不同的關系映射,從數(shù)據(jù)庫中提取一個或多個數(shù)據(jù)表生成文件。然后根據(jù)文件中的對應關系,把文件解析到目的數(shù)據(jù)庫。支持單表或多表之間的關系性打包及解包,支持Oracle和SQLServer數(shù)據(jù)庫,使得在源數(shù)據(jù)庫中增加新表需要同步時,不需要重新開發(fā)新的"生成文件的程序"和"解析文件的程序",更具備擴展性和可維護性。下面將結合附圖及實施例對本發(fā)明作進一步說明,附圖中圖1是本發(fā)明實施例的文件打包解包的方法總流程圖;圖2是本發(fā)明實施例的文件打包方法流程圖;圖3是本發(fā)明實施例的文件解包方法流程圖。具體實施例方式下面結合圖示,對本發(fā)明的優(yōu)選實施例作詳細介紹。本發(fā)明較佳實施例的文件打包解包的方法總體流程圖如圖1所示,由一個報文生成器和一個報文解析器來完成文件打包解包的過程,其包括以下步驟S101、報文生成器將源數(shù)據(jù)庫中需要打包的單表中的數(shù)據(jù)打包,生成一個文件,放到指定文件夾中,將需要打包的主從表的主表和從表中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中;S102、報文解析器從指定文件夾中,讀取單表中的數(shù)據(jù)打包的文件,解析后,將其中每條記錄寫入到目的數(shù)據(jù)庫相應的單表中,并從指定文件夾中,讀取主從表中的5數(shù)據(jù)打包生成的文件,解析后,將主表和從表中的信息同時寫入到目的數(shù)據(jù)庫相應的主表和從表中。其中,步驟S101中,需要對報文生成器先進行參數(shù)配置,需配置的參數(shù)及其說明如下表1所示,其中SQL為結構化查詢語言(StructuredQueryLanguage):表1報文生成器參數(shù)表<table>tableseeoriginaldocumentpage6</column></row><table>報文生成器打包流程如圖2所示,在報文生成器對表單進行打包直線,先查找打包SQL列表,再查找第一條SQL參數(shù),判斷是否在打包時間段,如果是,則執(zhí)行打包前主SQL,執(zhí)行打包主SQL,查找子SQL,執(zhí)行打包前子SQL,執(zhí)行打包子SQL,獲取打包數(shù)據(jù)。并根據(jù)表單類型判斷打包方式,分別進行打包。具體是,將分類的單表中的所有數(shù)據(jù)打包,并按需要分類,分別生成各個類的文件,放到動態(tài)生成的文件夾中;配置SQL語句關鍵字字段和SQL語句關鍵字對應文件夾后綴的參數(shù),根據(jù)該SQL語句關鍵字字段對需要打包的信息數(shù)據(jù)集進行分離,再根據(jù)SQL語句關鍵字字段與SQL語句關鍵字對應文件夾后綴的值動態(tài)創(chuàng)建文件夾,把分離后的數(shù)據(jù)集分別放入動態(tài)創(chuàng)建的文件夾中。執(zhí)行打包后子SQL,執(zhí)行打包后主SQL,刪除已經(jīng)打包過的數(shù)據(jù)。本實施例中,對單表中的所有數(shù)據(jù)打包,如以下表所示的員工表表2員工表<table>tableseeoriginaldocumentpage7</column></row><table>打包要求為,把員工表中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中。對主從表的主表和從表中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中,如下面表3和表4所示的"報銷單主表"和"報銷單從表"表3報銷單主表<table>tableseeoriginaldocumentpage7</column></row><table>表4報銷單從表<table>tableseeoriginaldocumentpage7</column></row><table>打包要求為,把"報銷單主表"和"報銷單從表"中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中。需要對單表分類打包時,如以下表5所示的出庫單表<table>tableseeoriginaldocumentpage8</column></row><table>打包要求為,把出庫單中的所有信息,打包,按目的店鋪ID分類,分別生成各店鋪的文件,放到動態(tài)生成的文件夾中。動態(tài)文件夾生成規(guī)則"目的店鋪ID"的值+文件夾后鄉(xiāng)^雙。其中,步驟S102中,需要對報文生成器先進行參數(shù)配置,需配置的參數(shù)及其說明如下表6和表7所示表6報文生成器參數(shù)主表<table>tableseeoriginaldocumentpage8</column></row><table><table>tableseeoriginaldocumentpage9</column></row><table>報文解析器的工作流程如圖3所示,具體是從所述指定文件夾中,讀取單表中的數(shù)據(jù)打包的文件,解析后,將其中每條記錄寫入到目的數(shù)據(jù)庫相應的單表中,并從指定文件夾中,讀取主從表中的數(shù)據(jù)打包生成的文件,解析后,將主表和從表中的信息同時寫入到目的數(shù)據(jù)庫相應的主表和從表中。讀取指定文件夾中的XML文件,根據(jù)文件編號,讀取相應的SQL參數(shù);根據(jù)SQL參數(shù)判斷經(jīng)打包的源數(shù)據(jù)庫中的表單是否存在主從表關系,根據(jù)判斷結果分別進行解析。當經(jīng)打包的源數(shù)據(jù)庫中的表單不存在主從表關系時,直接讀取主表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,即視圖名稱,讀取XML文件中的主表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句。當經(jīng)打包的源數(shù)據(jù)庫中的表單存在主從表關系時,開啟事務,讀取主表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,即視圖名稱,讀取XML文件中的主表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句。同時讀取子表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,即視圖名稱,讀取XML文件中的子表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句;最后提交事務。對前面所述的經(jīng)打包后的單表,如表2所示的員工表,的解包要求為從文件夾中,讀取報文文件,解析后,把每條記錄寫入到"員工表"中。對前面所述的主從表,如表3所示的報銷單主表和表4所示的報銷單從表,的解包要求為,從文件夾中,讀取報文文件,解析后,把每張報銷單完整的同時寫入到目的數(shù)據(jù)庫中報銷單主表和報銷單從表中。本發(fā)明通過采用公共的報文生成器和報文解析器,通過配置表與表之間的不同的關系映射,從數(shù)據(jù)庫中提取一個或多個數(shù)據(jù)表生成文件。然后根據(jù)文件中的對應關系,把文件解析到目的數(shù)據(jù)庫。支持單表或多表之間的關系性打包及解包,支持Oracle和SQLServer數(shù)據(jù)庫,使得在源數(shù)據(jù)庫中增加新表需要同步時,不需要重新開發(fā)新的"生成文件的程序"和"解析文件的程序",可在不同的軟件系統(tǒng)中實現(xiàn)文件的打包及解包復用,進行項目開發(fā)時可將精力集中在業(yè)務功能的實現(xiàn)上,與業(yè)務無關的系統(tǒng)功能皆可由可復用的框架提供。應當理解的是,對本領域普通技術人員來說,可以根據(jù)上述說明加以改進或變換,而所有這些改進和變換都應屬于本發(fā)明所附權利要求的保護范圍。權利要求一種文件打包解包的方法,其特征在于,包括以下步驟.A、報文生成器將源數(shù)據(jù)庫中需要打包的單表中的數(shù)據(jù)打包,生成一個文件,放到指定文件夾中,將需要打包的主從表的主表和從表中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中,將需要打包的單表的數(shù)據(jù)分類打包,生成不同的文件,分類放到動態(tài)生成的文件夾中;B、報文解析器從所述指定文件夾中,讀取單表中的數(shù)據(jù)打包的文件,解析后,將其中每條記錄寫入到目的數(shù)據(jù)庫相應的單表中,并從指定文件夾中,讀取主從表中的數(shù)據(jù)打包生成的文件,解析后,將主表和從表中的信息同時寫入到目的數(shù)據(jù)庫相應的主表和從表中。2.根據(jù)權利要求1所述的文件打包解包的方法,其特征在于,所述步驟Al包括All、配置SQL語句關鍵字字段和SQL語句關鍵字對應文件夾后綴的參數(shù),根據(jù)該SQL語句關鍵字字段對需要打包的信息數(shù)據(jù)集進行分離,再根據(jù)SQL語句關鍵字字段與SQL語句關鍵字對應文件夾后綴的值動態(tài)創(chuàng)建文件夾,把分離后的數(shù)據(jù)集分別放入動態(tài)創(chuàng)建的文件夾中。3.根據(jù)權利要求1所述的文件打包解包的方法,其特征在于,所述步驟A之前,包括步驟A0、查找打包SQL列表,查找第一條SQL參數(shù),判斷是否在打包時間段,如果是,則執(zhí)行打包前主SQL,執(zhí)行打包主SQL,查找子SQL,執(zhí)行打包前子SQL,執(zhí)行打包子SQL,獲取打包數(shù)據(jù);A01、根據(jù)表單類型判斷打包方式,分別進行打包。4.根據(jù)權利要求1所述的文件打包解包的方法,其特征在于,所述步驟A之后包括步驟A02、執(zhí)行打包后子SQL,執(zhí)行打包后主SQL,刪除已經(jīng)打包過的數(shù)據(jù)。5.根據(jù)權利要求1所述的文件打包解包的方法,其特征在于,所述步驟B包括Bl、讀取指定文件夾中的XML文件,根據(jù)文件編號,讀取相應的SQL參數(shù);B2、根據(jù)SQL參數(shù)判斷經(jīng)打包的源數(shù)據(jù)庫中的表單是否存在主從表關系,根據(jù)判斷結果分別進行解析。6.根據(jù)權利要求5所述的文件打包解包的方法,其特征在于,所述步驟B2包括B21、當經(jīng)打包的源數(shù)據(jù)庫中的表單不存在主從表關系時,直接讀取主表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,讀取XML文件中的主表數(shù)據(jù),解析為SQL語句;B22、執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句。7.根據(jù)權利要求5所述的文件打包解包的方法,其特征在于,所述步驟B2包括B23、當經(jīng)打包的源數(shù)據(jù)庫中的表單存在主從表關系時,開啟事務,讀取主表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,讀取XML文件中的主表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句;B24、同時讀取子表配置參數(shù),根據(jù)打包后的數(shù)據(jù)集名稱,讀取XML文件中的子表數(shù)據(jù),解析為SQL語句;執(zhí)行檢索SQL語句,根據(jù)檢索的關鍵字段,查詢待寫入記錄是否存在,在記錄不存在時,執(zhí)行插入SQL語句,在記錄存在時,執(zhí)行修改SQL語句;B25、提交事務。全文摘要本發(fā)明涉及一種文件打包解包的方法,包括以下步驟A、報文生成器將源數(shù)據(jù)庫中需要打包的單表中的數(shù)據(jù)打包,生成一個文件,放到指定文件夾中;將需要打包的主從表的主表和從表中的所有數(shù)據(jù)打包,生成一個文件,放到指定文件夾中;將需要打包的單表的數(shù)據(jù)分類打包,生成不同的文件,分類放到動態(tài)生成的文件夾中;B、報文解析器從所述指定文件夾中,讀取單表中的數(shù)據(jù)打包的文件,解析后,將其中每條記錄寫入到目的數(shù)據(jù)庫相應的單表中,并從指定文件夾中,讀取主從表中的數(shù)據(jù)打包生成的文件,解析后,將主表和從表中的信息同時寫入到目的數(shù)據(jù)庫相應的主表和從表中。本發(fā)明支持單表或多表之間的關系性打包及解包,使得在源數(shù)據(jù)庫中增加新表需要同步時,不需要重新開發(fā)新的程序,使業(yè)務系統(tǒng)的實現(xiàn)更具備擴展性和可維護性。文檔編號G06F17/30GK101770503SQ20091023952公開日2010年7月7日申請日期2009年12月31日優(yōu)先權日2009年12月31日發(fā)明者鄭磊申請人:深圳聯(lián)友科技有限公司