一種基于sqlite的數(shù)據(jù)同步傳輸方法
【專利摘要】本發(fā)明涉及一種基于sqlite的數(shù)據(jù)同步傳輸方法,與現(xiàn)有技術相比解決了沒有可靠地、快速地數(shù)據(jù)傳輸方法的缺陷。本發(fā)明包括以下步驟:初始化本地數(shù)據(jù)庫;本地數(shù)據(jù)存儲更新;數(shù)據(jù)同步模塊監(jiān)聽網(wǎng)絡;服務器接收數(shù)據(jù);服務器反饋數(shù)據(jù);版本對比。本發(fā)明實現(xiàn)了斷網(wǎng)環(huán)境和有網(wǎng)環(huán)境的數(shù)據(jù)傳輸,并且數(shù)據(jù)之間不會產生沖突。
【專利說明】—種基于sql ite的數(shù)據(jù)同步傳輸方法
[0001]
【技術領域】
[0002]本發(fā)明涉及數(shù)據(jù)傳輸【技術領域】,具體來說是一種基于sqlite的數(shù)據(jù)同步傳輸方法。
[0003]
【背景技術】
[0004]移動互聯(lián)網(wǎng)的快速發(fā)展、網(wǎng)絡傳輸技術的改善以及智能終端的普及,使得各種智能終端的應用產品應運而生,為人們的日常生活和辦公帶來了極大的方便。這些產品在使用過程中往往需要和服務器端程序進行網(wǎng)絡交互,以達到上傳、獲取及同步數(shù)據(jù)的目的。傳統(tǒng)的交互方式一般有以下兩種: 1、在線C/S通信方式,該方式通過網(wǎng)絡提供即時的客戶端與服務端間的通信,這種方式的優(yōu)點是,數(shù)據(jù)即時同步,沒有同步數(shù)據(jù)沖突的問題,缺點是對網(wǎng)絡穩(wěn)定性要求較高,在通信過程中出現(xiàn)網(wǎng)絡故障會造成數(shù)據(jù)通信失敗,用戶無法繼續(xù)使用甚至是數(shù)據(jù)丟失;
2、傳統(tǒng)離線同步方式,該方法的基本原理是,用戶在終端處理的數(shù)據(jù)先存在本地,在有網(wǎng)絡的時候,用戶手動去選擇同步數(shù)據(jù)到服務端,該類方法一定程度了緩解了終端對網(wǎng)絡的依賴程度,但也降低了客戶端與服務端數(shù)據(jù)同步的實時性,而且該類同步方法一般在單一終端使用時效果較好,一旦在同一賬戶下有多終端同時使用的情況就容易造成數(shù)據(jù)沖關。
[0005]而若將以上兩種方式結合,則又會產生數(shù)據(jù)沖突的問題,并且目前的數(shù)據(jù)同步方法隨著數(shù)據(jù)傳輸量越來越大,也導致其反應速度越來越慢。如何研究出一種快速地、可靠地數(shù)據(jù)同步傳輸方法已經成為急需解決的技術問題。
【發(fā)明內容】
[0006]本發(fā)明的目的是為了解決現(xiàn)有技術中沒有可靠地、快速地數(shù)據(jù)傳輸方法的缺陷,提供一種基于sqlite的數(shù)據(jù)同步傳輸方法來解決上述問題。
[0007]為了實現(xiàn)上述目的,本發(fā)明的技術方案如下:
一種基于sqlite的數(shù)據(jù)同步傳輸方法,包括以下步驟:
初始化本地數(shù)據(jù)庫,將sqlite數(shù)據(jù)庫模板拷貝到本地數(shù)據(jù)庫,作為智能終端數(shù)據(jù)存儲的載體,并且在數(shù)據(jù)庫文件名稱中加入用戶ID號,在數(shù)據(jù)庫中劃分出業(yè)務數(shù)據(jù)表和本地更新數(shù)據(jù)版本表;
本地數(shù)據(jù)存儲更新,智能終端將數(shù)據(jù)存儲到本地sqlite數(shù)據(jù)庫,在數(shù)據(jù)庫中生成一條數(shù)據(jù)更新版本記錄并觸發(fā)數(shù)據(jù)同步模塊進行一次數(shù)據(jù)同步處理;
數(shù)據(jù)同步模塊監(jiān)聽網(wǎng)絡,數(shù)據(jù)同步模塊監(jiān)聽同步請求并檢測網(wǎng)絡,根據(jù)網(wǎng)絡情況選擇上傳數(shù)據(jù)或回發(fā)請求命令; 服務器接收數(shù)據(jù),服務器接收到智能終端同步請求的數(shù)據(jù),對其進行業(yè)務邏輯判斷和處理后,將其更新到服務器數(shù)據(jù)庫中;
服務器反饋數(shù)據(jù),服務器接收數(shù)據(jù)處理完成后,生成反饋數(shù)據(jù)發(fā)送給智能終端;
版本對比,智能終端接收到反饋數(shù)據(jù)后,根據(jù)反饋數(shù)據(jù)的版本狀態(tài)與本地數(shù)據(jù)進行版本比對,更新智能終端本地數(shù)據(jù)。
[0008]所述的本地數(shù)據(jù)存儲更新包括以下步驟:
數(shù)據(jù)同步模塊接收智能終端所發(fā)出的業(yè)務數(shù)據(jù)處理指令;
判斷數(shù)據(jù)處理的指令類型;
若指令類型為查詢指令,則直接執(zhí)行并返回查詢結果;
若指令類型為新增數(shù)據(jù)指令,則分析該新增指令,獲取待新增數(shù)據(jù)指令的關鍵值,向本地更新數(shù)據(jù)版本表生成一條數(shù)據(jù)版本記錄,版本號Version為1,并在業(yè)務數(shù)據(jù)表中執(zhí)行新增版本記錄指令;
若指令類型為更新數(shù)據(jù)指令語句,則分析該更新數(shù)據(jù)指令,獲取待更新數(shù)據(jù)指令的關鍵值;判斷數(shù)據(jù)版本記錄中有無對應的數(shù)據(jù),如無則在本地更新數(shù)據(jù)版本表生成一條數(shù)據(jù)版本記錄,版本號Version為1,并在業(yè)務數(shù)據(jù)表中執(zhí)行更新版本記錄指令;若有則在本地更新數(shù)據(jù)版本表的該版本記錄上將Version加1,并在業(yè)務數(shù)據(jù)表中執(zhí)行更新版本記錄指令。
[0009]所述的數(shù)據(jù)同步模塊監(jiān)聽網(wǎng)絡包括以下步驟:
當本地更新數(shù)據(jù)版本表中版本表有記錄時,通知數(shù)據(jù)用戶模塊進行智能終端本地數(shù)據(jù)的上傳處理;
數(shù)據(jù)同步模塊監(jiān)聽同步請求,若檢測到網(wǎng)絡正常時,主動發(fā)起一次與服務器的同步請求;若沒有監(jiān)聽到同步請求命令且網(wǎng)絡正常的情況下,數(shù)據(jù)同步模塊在間隔規(guī)定的時間向自身發(fā)起一個請求命令;
上傳本地更新數(shù)據(jù)版本表找到相應的版本記錄,根據(jù)版本記錄到業(yè)務數(shù)據(jù)表中抽取更新數(shù)據(jù),數(shù)據(jù)按照業(yè)務數(shù)據(jù)表進行分類,每個數(shù)據(jù)表的數(shù)據(jù)放在一個數(shù)組中,將對應數(shù)據(jù)版本號Version也一同保存到數(shù)據(jù)結構中;
數(shù)據(jù)結構定義按照JSON標準進行組織,其中DownLoadTime為上次同步成功時間,第一次同步為空,TableList為列表類型值,包含更新數(shù)據(jù)表的數(shù)據(jù)定義,包括version字段,均以key-value的形式進行定義;
將上次同步傳輸成功的時間告知服務器接口。
[0010]所述的服務器接收數(shù)據(jù)包括以下步驟:
服務器接收到上傳的數(shù)據(jù)后,檢查TableLiSt列表中是否含有數(shù)據(jù),若含有數(shù)據(jù),則循環(huán)TableList列表,根據(jù)Table_l、Table_2或Table_n表名來判斷各表內數(shù)據(jù)做不同的業(yè)務邏輯處理;
若對應表中的數(shù)據(jù)符合相應的業(yè)務邏輯,則判斷服務器數(shù)據(jù)庫中是否已存在該條數(shù)據(jù),若存在則做更新處理,不存在則做新增處理;如果對應表中的數(shù)據(jù)不符合相關的業(yè)務邏輯,則不將該條數(shù)據(jù)同步到服務器數(shù)據(jù)庫,并記錄下數(shù)據(jù)ID ;
若上傳的數(shù)據(jù)與服務器數(shù)據(jù)發(fā)生沖突,判斷沖突類型;
若是服務器和智能終端同時修改了同一條數(shù)據(jù)時,如果服務器修改時間在先,智能終端修改時間在后,則將智能終端的數(shù)據(jù)覆蓋服務器數(shù)據(jù),反之則不覆蓋服務器數(shù)據(jù);
若智能終端和服務器所發(fā)生沖突為名稱或其它唯一字段發(fā)生重復沖突,則在上傳的數(shù)據(jù)發(fā)生沖突的字段后添加后綴標識后再做數(shù)據(jù)更新。
[0011]所述的服務器反饋數(shù)據(jù)包括以下步驟:
待接收數(shù)據(jù)處理完成后,生成反饋數(shù)據(jù),反饋的數(shù)據(jù)包括:客戶端新增數(shù)據(jù)、合并數(shù)據(jù)、服務器更新數(shù)據(jù);
將反饋數(shù)據(jù)按照JSON標準進行組織定義,其中DownLoadTime為本次同步成功的服務器時間,TableList為列表類型值,包含有更新數(shù)據(jù)表的數(shù)據(jù)定義,包括version字段,均以key-value的形式進行定義;設定類型為列表的Error數(shù)據(jù)定義,其中ErroeCode存放的是錯誤碼、ErroeMsg存放的是錯誤提示消息;
將反饋數(shù)據(jù)傳送給智能終端。
[0012]所述的版本對比包括以下步驟:
智能終端接收到服務器反饋的數(shù)據(jù)后,檢查TableList列表中是否含有數(shù)據(jù),若存在則循環(huán)遍歷列表中的每條數(shù)據(jù),檢索本地數(shù)據(jù)是否存在對應的業(yè)務數(shù)據(jù),如果不存在對應的業(yè)務數(shù)據(jù),則直接插入到智能終端的本地sqlite數(shù)據(jù)庫中;
若本地數(shù)據(jù)存在業(yè)務數(shù)據(jù),且本地更新數(shù)據(jù)版本表中沒有對應的版本記錄,則直接將反饋數(shù)據(jù)更新到本地數(shù)據(jù)庫中;
若本地存在業(yè)務數(shù)據(jù),且本地更新數(shù)據(jù)版本表中存在對應的版本記錄,則進行版本比較,若版本相同則允許更新到本地數(shù)據(jù)庫,若版本不同則不更新本地數(shù)據(jù)庫;
若TableList中不含數(shù)據(jù)則跳過對TableList列表的循環(huán)遍歷處理;
處理完TableList列表后,判斷Error列表中有無數(shù)據(jù),若有數(shù)據(jù),則循環(huán)遍歷其中的每條數(shù)據(jù),將錯誤數(shù)據(jù)和錯誤信息顯示。
[0013]有益效果
本發(fā)明的一種基于sqlite的數(shù)據(jù)同步傳輸方法,與現(xiàn)有技術相比實現(xiàn)了斷網(wǎng)環(huán)境和有網(wǎng)環(huán)境的數(shù)據(jù)傳輸,并且數(shù)據(jù)之間不會產生沖突。通過sqlite小巧、實用的特性,將sqlite數(shù)據(jù)庫作為數(shù)據(jù)載體,提高了響應速度。通過增加了數(shù)據(jù)版本比對步驟,防止了數(shù)據(jù)沖突,同時實時檢測終端網(wǎng)絡狀態(tài),可以及時發(fā)起同步請求,終端和服務器數(shù)據(jù)近乎一致。解決了終端離線不能使用的問題,不因網(wǎng)絡狀況阻斷用戶使用,并大大提高終端數(shù)據(jù)同步的及時性、準確性,可以很好的改善終端在使用過程中的體驗,適合應用于移動互聯(lián)網(wǎng)領域多終端數(shù)據(jù)同步實現(xiàn)。
[0014]【專利附圖】
【附圖說明】
圖1為本發(fā)明連接關系圖 圖2為本發(fā)明方法流程圖
圖3為本發(fā)明所述的本地數(shù)據(jù)存儲更新的方法流程圖 其中,1-智能終端、2-服務器、3-數(shù)據(jù)同步模塊。
[0015]【具體實施方式】
[0016]為使對本發(fā)明的結構特征及所達成的功效有更進一步的了解與認識,用以較佳的實施例及附圖配合詳細的說明,說明如下:
如圖2所示,本發(fā)明所述的一種基于sqlite的數(shù)據(jù)同步傳輸方法,包括以下步驟:第一步,初始化本地數(shù)據(jù)庫,將sqlite數(shù)據(jù)庫模板拷貝到本地數(shù)據(jù)庫,作為智能終端I數(shù)據(jù)存儲的載體,并且在數(shù)據(jù)庫文件名稱中加入用戶ID號,在數(shù)據(jù)庫中劃分出業(yè)務數(shù)據(jù)表和本地更新數(shù)據(jù)版本表。如圖1所示,智能終端I與服務器2之間通過數(shù)據(jù)同步模塊3進行數(shù)據(jù)傳輸。
[0017]利用sqlite小型數(shù)據(jù)庫作為存儲數(shù)據(jù)載體,在程序打包時將本地數(shù)據(jù)存儲結構以sqlite數(shù)據(jù)庫模板的形式放置在程序包中,程序第一次啟動運行時,將模板拷貝到智能終端I的工作區(qū)做為本地數(shù)據(jù)庫,同時為區(qū)分同一終端的不同用戶的數(shù)據(jù),數(shù)據(jù)庫文件名稱中包含用戶在系統(tǒng)中的唯一 ID。數(shù)據(jù)庫中的表分為兩種類型,業(yè)務數(shù)據(jù)表和本地更新數(shù)據(jù)版本表,其中業(yè)務數(shù)據(jù)表可有更具實際業(yè)務情況設置多張,主要存儲各相關業(yè)務數(shù)據(jù);版本表只有一張,用于存儲本地更新的數(shù)據(jù)記錄。
[0018]第二步,本地數(shù)據(jù)存儲更新,智能終端I將數(shù)據(jù)存儲到本地sqlite數(shù)據(jù)庫,在數(shù)據(jù)庫中生成一條數(shù)據(jù)更新版本記錄并觸發(fā)數(shù)據(jù)同步模塊3進行一次數(shù)據(jù)同步處理。當智能終端I新增一條業(yè)務數(shù)據(jù)時,除要向業(yè)務數(shù)據(jù)表新增相關數(shù)據(jù)外,還需同時向本地更新數(shù)據(jù)版本表中增加一條數(shù)據(jù)版本記錄,版本號Version設為I ;當智能終端I業(yè)務數(shù)據(jù)有修改時,除要修改相關業(yè)務表數(shù)據(jù)外,還要先檢查本地更新數(shù)據(jù)版本表中有無對應版本記錄,有則將對應記錄Version加I,無則新增一套版本數(shù)據(jù),Version設為I。數(shù)據(jù)更新版本的處理完全在系統(tǒng)底層統(tǒng)一進行操作,對上層業(yè)務處理層完全透明,不增加業(yè)務處理層的任何復雜度。如圖3所示,其具體步驟如下:
(I)數(shù)據(jù)同步模塊3接收智能終端I所發(fā)出的業(yè)務數(shù)據(jù)處理指令。
[0019](2)數(shù)據(jù)同步模塊3判斷數(shù)據(jù)處理的指令類型,是查詢、新增或更新。
[0020](3)若指令類型為查詢指令,則直接執(zhí)行并返回查詢結果。
[0021](4)若指令類型為新增數(shù)據(jù)指令,則分析該新增指令,獲取待新增數(shù)據(jù)指令的關鍵值,根據(jù)分析所得,本地更新數(shù)據(jù)版本表生成一條數(shù)據(jù)版本記錄,版本號Version為1,并在業(yè)務數(shù)據(jù)表中執(zhí)行新增版本記錄指令。
[0022](5)若指令類型為更新數(shù)據(jù)指令語句,則分析該更新數(shù)據(jù)指令,獲取待更新數(shù)據(jù)指令的關鍵值;判斷數(shù)據(jù)版本記錄中有無對應的數(shù)據(jù),如無則在本地更新數(shù)據(jù)版本表生成一條數(shù)據(jù)版本記錄,版本號Version為1,并在業(yè)務數(shù)據(jù)表中執(zhí)行更新版本記錄指令;若有則在本地更新數(shù)據(jù)版本表的該版本記錄上將Version加1,并在業(yè)務數(shù)據(jù)表中執(zhí)行更新版本記錄指令。
[0023]由于數(shù)據(jù)是存放在分散的智能終端I上的,而這個給數(shù)據(jù)安全性帶來了挑戰(zhàn),特別是一些敏感商業(yè)數(shù)據(jù)被竊取的危害是很大的,因此可以在圖1的基礎上對數(shù)據(jù)庫中存儲的數(shù)據(jù)的存和取需要進行加解密處理。在平衡了效率與安全性兩者之后,可以選擇DES作為我們統(tǒng)一的加密算法。但是每個終端的加密秘鑰都不是相同的,秘鑰的生成方法如下:將系統(tǒng)用戶信息(如用戶名、用戶ID)和終端設備信息(如設備ID、網(wǎng)卡地址)等拼成一個字符串,在使用加密器生成一個全球唯一的秘鑰串碼,使用這個秘鑰串碼對數(shù)據(jù)加密可以最大限度的防止數(shù)據(jù)被竊取破譯。
[0024]第三步,數(shù)據(jù)同步模塊監(jiān)聽網(wǎng)絡,數(shù)據(jù)同步模塊3監(jiān)聽同步請求并檢測網(wǎng)絡,根據(jù)網(wǎng)絡情況選擇上傳數(shù)據(jù)或回發(fā)請求命令。當數(shù)據(jù)同步模塊3監(jiān)聽到同步請求同時又檢測到網(wǎng)絡正常時,主動發(fā)起一次與服務器的同步請求,根據(jù)智能終端I本地數(shù)據(jù)版本庫中的記錄,抽取需要同步上傳的增量數(shù)據(jù)。另外在沒有監(jiān)聽到同步請求命令且網(wǎng)絡正常的情況下,數(shù)據(jù)同步模塊3也會間隔規(guī)定的時間也會向自身發(fā)起一個請求命令。數(shù)據(jù)同步模塊3的處理完全在后臺運行,不影響終端使用的連續(xù)性。其具體步驟如下:
(I)當本地更新數(shù)據(jù)版本表中版本表有記錄時,通知數(shù)據(jù)用戶模塊2進行智能終端I本地數(shù)據(jù)的上傳處理。
[0025](2)數(shù)據(jù)同步模塊3監(jiān)聽同步請求,若檢測到網(wǎng)絡正常時,主動發(fā)起一次與服務器2的同步請求;若沒有監(jiān)聽到同步請求命令且網(wǎng)絡正常的情況下,數(shù)據(jù)同步模塊3在間隔規(guī)定的時間向自身發(fā)起一個請求命令。
[0026](3)上傳本地更新數(shù)據(jù)版本表找到相應的版本記錄,根據(jù)版本記錄到業(yè)務數(shù)據(jù)表中抽取更新數(shù)據(jù),數(shù)據(jù)按照業(yè)務數(shù)據(jù)表進行分類,每個數(shù)據(jù)表的數(shù)據(jù)放在一個數(shù)組中,將對應數(shù)據(jù)版本號Version也一同保存到數(shù)據(jù)結構中。
[0027](4)數(shù)據(jù)結構定義按照JSON標準進行組織,其中DownLoadTime為上次同步成功時間,第一次同步為空,TableList為列表類型值,包含更新數(shù)據(jù)表的數(shù)據(jù)定義,包括version字段,均以key-value的形式進行定義。當本地一段時間內一直沒有數(shù)據(jù)更新,后臺的定時任務也會每間隔一段時間即向服務器請求一次數(shù)據(jù)同步,只是此時上傳的數(shù)據(jù)TableList為空,其它的處理邏輯均相同。
[0028](5)將上次同步傳輸成功的時間告知服務器2接口。智能終端I上傳的數(shù)據(jù)只包含更新的增量部分,而不是全部,因此可以大大減少智能終端I與服務器2交互所需要花費的流量和時間。
[0029]第四步,服務器2接收數(shù)據(jù),服務器2接收到智能終端I同步請求的數(shù)據(jù),對其進行業(yè)務邏輯判斷和處理后,將其更新到服務器2數(shù)據(jù)庫中。其包括以下步驟:
(I)服務器2接收到上傳的數(shù)據(jù)后,檢查TableList列表中是否含有數(shù)據(jù),若含有數(shù)據(jù),則循環(huán)TableList列表,根據(jù)Table_l、Table_2或Table_n等表名來判斷各表內數(shù)據(jù)做不同的業(yè)務邏輯處理。
[0030](2)若對應表中的數(shù)據(jù)符合相應的業(yè)務邏輯,則判斷服務器2數(shù)據(jù)庫中是否已存在該條數(shù)據(jù),若存在則做更新處理,不存在則做新增處理;如果對應表中的數(shù)據(jù)不符合相關的業(yè)務邏輯,則不將該條數(shù)據(jù)同步到服務器2數(shù)據(jù)庫,并記錄下數(shù)據(jù)ID。
[0031](3)若上傳的數(shù)據(jù)與服務器2數(shù)據(jù)發(fā)生沖突,判斷沖突類型。若是服務器2和智能終端I同時修改了同一條數(shù)據(jù)時,如果服務器2修改時間在先,智能終端I修改時間在后,則將智能終端I的數(shù)據(jù)覆蓋服務器2數(shù)據(jù),反之則不覆蓋服務器2數(shù)據(jù);若智能終端I和服務器2所發(fā)生沖突為名稱或其它唯一字段發(fā)生重復沖突,則在上傳的數(shù)據(jù)發(fā)生沖突的字段后添加后綴一再做數(shù)據(jù)更新,以此來解決數(shù)據(jù)沖突的問題。
[0032]第五步,服務器2反饋數(shù)據(jù),服務器2接收數(shù)據(jù)處理完成后,生成反饋數(shù)據(jù)發(fā)送給智能終端I。反饋的數(shù)據(jù)包括:本次客戶端新增數(shù)據(jù)、本次合并數(shù)據(jù)、本次服務端更新數(shù)據(jù)。其包括以下步驟:
(I)待接收數(shù)據(jù)處理完成后,生成反饋數(shù)據(jù),反饋的數(shù)據(jù)包括:客戶端新增數(shù)據(jù)、合并數(shù)據(jù)、服務器更新數(shù)據(jù)。本次新增數(shù)據(jù)不需要返回完整的數(shù)據(jù),只需要返回同步狀態(tài);合并和服務端更新數(shù)據(jù)需要返回完整的數(shù)據(jù)。其中服務端更新數(shù)據(jù)以終端上傳的上次同步成功時間為節(jié)點,取其后更新的增量數(shù)據(jù)。數(shù)據(jù)生成好后,將其反饋給終端,告知終端處理結果。
[0033](2)將反饋數(shù)據(jù)按照JSON標準進行組織定義,其中DownLoadTime為本次同步成功的服務器時間,TableList為列表類型值,包含有更新數(shù)據(jù)表的數(shù)據(jù)定義,包括version字段,均以key-value的形式進行定義;設定類型為列表的Error數(shù)據(jù)定義,這里存放的是在服務器2處理發(fā)生業(yè)務邏輯驗證錯誤或異常的數(shù)據(jù),其中ErroeCode存放的是錯誤碼、ErroeMsg存放的是錯誤提示消息。
[0034](3)將反饋數(shù)據(jù)傳送給智能終端1,告知智能終端I處理結果。
[0035]第六步,版本對比,智能終端I接收到反饋數(shù)據(jù)后,根據(jù)反饋數(shù)據(jù)的版本狀態(tài)進行版本比對,更新智能終端I本地數(shù)據(jù),對本地數(shù)據(jù)做新增、更新或不處理等操作。其包括以下步驟:
(I)智能終端I接收到服務器2反饋的數(shù)據(jù)后,檢查TableList列表中是否含有數(shù)據(jù),若存在則循環(huán)遍歷列表中的每條數(shù)據(jù),檢索本地數(shù)據(jù)是否存在對應的業(yè)務數(shù)據(jù),如果不存在對應的業(yè)務數(shù)據(jù),則直接插入到智能終端I的本地sqlite數(shù)據(jù)庫中。
[0036](2)若本地數(shù)據(jù)存在業(yè)務數(shù)據(jù),且本地更新數(shù)據(jù)版本表中沒有對應的版本記錄,則直接將反饋數(shù)據(jù)更新到本地數(shù)據(jù)庫中;若本地存在業(yè)務數(shù)據(jù),且本地更新數(shù)據(jù)版本表中存在對應的版本記錄,則進行版本比較,若版本相同則允許更新到本地數(shù)據(jù)庫,若版本不同則不更新本地數(shù)據(jù)庫。
[0037](3)若TableList中不含數(shù)據(jù)則跳過對TableList列表的循環(huán)遍歷處理。
[0038](4)處理完TableList列表后,判斷Error列表中有無數(shù)據(jù),若有數(shù)據(jù),則循環(huán)遍歷其中的每條數(shù)據(jù),將錯誤數(shù)據(jù)和錯誤信息顯示,終端用戶可以對錯誤數(shù)據(jù)局進行手動處理,如修改本地錯誤數(shù)據(jù)、刪除本地錯誤數(shù)據(jù)等。
[0039]本發(fā)明在數(shù)據(jù)同步傳輸過程中,如果一次同步沒有成功,數(shù)據(jù)版本記錄不會丟失,下次同步時會重新上傳數(shù)據(jù),這樣可以有效避免終端數(shù)據(jù)丟失;同時由于引入了版本號標識,解決了數(shù)據(jù)沖突合并的問題;另外同步過程的數(shù)據(jù)均使用增量形式,大大減少終端與服務端交互是需要花費的流量和時間。
[0040]以上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點。本行業(yè)的技術人員應該了解,本發(fā)明不受上述實施例的限制,上述實施例和說明書中描述的只是本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下本發(fā)明還會有各種變化和改進,這些變化和改進都落入要求保護的本發(fā)明的范圍內。本發(fā)明要求的保護范圍由所附的權利要求書及其等同物界定。
【權利要求】
1.一種基于sqlite的數(shù)據(jù)同步傳輸方法,其特征在于,包括以下步驟: 11)初始化本地數(shù)據(jù)庫,將sqlite數(shù)據(jù)庫模板拷貝到本地數(shù)據(jù)庫,作為智能終端(I)數(shù)據(jù)存儲的載體,并且在數(shù)據(jù)庫文件名稱中加入用戶ID號,在數(shù)據(jù)庫中劃分出業(yè)務數(shù)據(jù)表和本地更新數(shù)據(jù)版本表; 12)本地數(shù)據(jù)存儲更新,智能終端(I)將數(shù)據(jù)存儲到本地sqlite數(shù)據(jù)庫,在數(shù)據(jù)庫中生成一條數(shù)據(jù)更新版本記錄并觸發(fā)數(shù)據(jù)同步模塊(3)進行一次數(shù)據(jù)同步處理; 13)數(shù)據(jù)同步模塊監(jiān)聽網(wǎng)絡,數(shù)據(jù)同步模塊(3)監(jiān)聽同步請求并檢測網(wǎng)絡,根據(jù)網(wǎng)絡情況選擇上傳數(shù)據(jù)或回發(fā)請求命令; 14)服務器(2)接收數(shù)據(jù),服務器(2)接收到智能終端(I)同步請求的數(shù)據(jù),對其進行業(yè)務邏輯判斷和處理后,將其更新到服務器(2)數(shù)據(jù)庫中; 15)服務器(2)反饋數(shù)據(jù),服務器(2)接收數(shù)據(jù)處理完成后,生成反饋數(shù)據(jù)發(fā)送給智能終立而(I); 16)版本對比,智能終端(I)接收到反饋數(shù)據(jù)后,根據(jù)反饋數(shù)據(jù)的版本狀態(tài)與本地數(shù)據(jù)進行版本比對,更新智能終端(I)本地數(shù)據(jù)。
2.根據(jù)權利要求1所述的一種基于sqlite的數(shù)據(jù)同步傳輸方法,其特征在于,所述的本地數(shù)據(jù)存儲更新包括以下步驟: 21)數(shù)據(jù)同步模塊(3)接收智能終端(I)所發(fā)出的業(yè)務數(shù)據(jù)處理指令; 22)判斷數(shù)據(jù)處理的指令類型; 23)若指令類型為查詢指令,則直接執(zhí)行并返回查詢結果; 24)若指令類型為新增數(shù)據(jù)指令,則分析該新增指令,獲取待新增數(shù)據(jù)指令的關鍵值,向本地更新數(shù)據(jù)版本表生成一條數(shù)據(jù)版本記錄,版本號Version為1,并在業(yè)務數(shù)據(jù)表中執(zhí)行新增版本記錄指令; 25)若指令類型為更新數(shù)據(jù)指令語句,則分析該更新數(shù)據(jù)指令,獲取待更新數(shù)據(jù)指令的關鍵值;判斷數(shù)據(jù)版本記錄中有無對應的數(shù)據(jù),如無則在本地更新數(shù)據(jù)版本表生成一條數(shù)據(jù)版本記錄,版本號Version為1,并在業(yè)務數(shù)據(jù)表中執(zhí)行更新版本記錄指令;若有則在本地更新數(shù)據(jù)版本表的該版本記錄上將Version加1,并在業(yè)務數(shù)據(jù)表中執(zhí)行更新版本記錄指令。
3.根據(jù)權利要求1所述的一種基于sqlite的數(shù)據(jù)同步傳輸方法,其特征在于,所述的數(shù)據(jù)同步模塊監(jiān)聽網(wǎng)絡包括以下步驟: 31)當本地更新數(shù)據(jù)版本表中版本表有記錄時,通知數(shù)據(jù)用戶模塊(2)進行智能終端(1)本地數(shù)據(jù)的上傳處理; 32)數(shù)據(jù)同步模塊(3)監(jiān)聽同步請求,若檢測到網(wǎng)絡正常時,主動發(fā)起一次與服務器(2)的同步請求;若沒有監(jiān)聽到同步請求命令且網(wǎng)絡正常的情況下,數(shù)據(jù)同步模塊(3)在間隔規(guī)定的時間向自身發(fā)起一個請求命令; 33)上傳本地更新數(shù)據(jù)版本表,找到相應的版本記錄,根據(jù)版本記錄到業(yè)務數(shù)據(jù)表中抽取更新數(shù)據(jù),數(shù)據(jù)按照業(yè)務數(shù)據(jù)表進行分類,每個數(shù)據(jù)表的數(shù)據(jù)放在一個數(shù)組中,將對應數(shù)據(jù)版本號Version也一同保存到數(shù)據(jù)結構中; 34)數(shù)據(jù)結構定義按照JSON標準進行組織,其中DownLoadTime為上次同步成功時間,第一次同步為空,TableList為列表類型值,包含更新數(shù)據(jù)表的數(shù)據(jù)定義,包括version字段,均以key-value的形式進行定義; 35)將上次同步傳輸成功的時間告知服務器(2)接口。
4.根據(jù)權利要求1所述的一種基于sqlite的數(shù)據(jù)同步傳輸方法,其特征在于,所述的服務器接收數(shù)據(jù)包括以下步驟: 41)服務器(2)接收到上傳的數(shù)據(jù)后,檢查TableList列表中是否含有數(shù)據(jù),若含有數(shù)據(jù),則循環(huán)TableList列表,根據(jù)Table_l、Table_2或Table_n表名來判斷各表內數(shù)據(jù)做不同的業(yè)務邏輯處理; 42)若對應表中的數(shù)據(jù)符合相應的業(yè)務邏輯,則判斷服務器(2)數(shù)據(jù)庫中是否已存在該條數(shù)據(jù),若存在則做更新處理,不存在則做新增處理;如果對應表中的數(shù)據(jù)不符合相關的業(yè)務邏輯,則不將該條數(shù)據(jù)同步到服務器(2)數(shù)據(jù)庫,并記錄下數(shù)據(jù)ID ; 43)若上傳的數(shù)據(jù)與服務器(2)數(shù)據(jù)發(fā)生沖突,判斷沖突類型; 若是服務器(2)和智能終端(I)同時修改了同一條數(shù)據(jù)時,如果服務器(2)修改時間在先,智能終端(I)修改時間在后,則將智能終端(I)的數(shù)據(jù)覆蓋服務器(2)數(shù)據(jù),反之則不覆蓋服務器(2)數(shù)據(jù); 若智能終端(I)和服務器(2)所發(fā)生沖突為名稱或其它唯一字段發(fā)生重復沖突,則在上傳的數(shù)據(jù)發(fā)生沖突的字段后添加后綴標識后再做數(shù)據(jù)更新。
5.根據(jù)權利要求1所述的一種基于sqlite的數(shù)據(jù)同步傳輸方法,其特征在于,所述的服務器反饋數(shù)據(jù)包括以下步驟: 51)待接收數(shù)據(jù)處理完成后,生成反饋數(shù)據(jù),反饋的數(shù)據(jù)包括:客戶端新增數(shù)據(jù)、合并數(shù)據(jù)、服務器更新數(shù)據(jù); 52)將反饋數(shù)據(jù)按照JSON標準進行組織定義,其中DownLoadTime為本次同步成功的服務器時間,TableList為列表類型值,包含有更新數(shù)據(jù)表的數(shù)據(jù)定義,包括version字段,均以key-value的形式進行定義;設定類型為列表的Error數(shù)據(jù)定義,其中ErroeCode存放的是錯誤碼、ErroeMsg存放的是錯誤提示消息; 53)將反饋數(shù)據(jù)傳送給智能終端(I)。
6.根據(jù)權利要求1所述的一種基于sqlite的數(shù)據(jù)同步傳輸方法,其特征在于,所述的版本對比包括以下步驟: 61)智能終端(I)接收到服務器(2)反饋的數(shù)據(jù)后,檢查TableList列表中是否含有數(shù)據(jù),若存在則循環(huán)遍歷列表中的每條數(shù)據(jù),檢索本地數(shù)據(jù)是否存在對應的業(yè)務數(shù)據(jù),如果不存在對應的業(yè)務數(shù)據(jù),則直接插入到智能終端(I)的本地sqlite數(shù)據(jù)庫中; 62)若本地數(shù)據(jù)存在業(yè)務數(shù)據(jù),且本地更新數(shù)據(jù)版本表中沒有對應的版本記錄,則直接將反饋數(shù)據(jù)更新到本地數(shù)據(jù)庫中; 若本地存在業(yè)務數(shù)據(jù),且本地更新數(shù)據(jù)版本表中存在對應的版本記錄,則進行版本比較,若版本相同則允許更新到本地數(shù)據(jù)庫,若版本不同則不更新本地數(shù)據(jù)庫; 63)若TableList中不含數(shù)據(jù)則跳過對TableList列表的循環(huán)遍歷處理; 64)處理完TableList列表后,判斷Error列表中有無數(shù)據(jù),若有數(shù)據(jù),則循環(huán)遍歷其中的每條數(shù)據(jù),將錯誤數(shù)據(jù)和錯誤信息顯示。
【文檔編號】G06F17/30GK103916482SQ201410159454
【公開日】2014年7月9日 申請日期:2014年4月21日 優(yōu)先權日:2014年4月21日
【發(fā)明者】王勝, 吳現(xiàn)兵, 李建, 劉康寧 申請人:合肥盈云信息科技有限公司