Html5离线存储和数据同步

一、整体流程设计

流程细节如下:

(1)WebSQL用于存储本地数据。

(2)LocalStroage用于暂存需要同步数据。

(3)XML用于存储所有操作过程和数操作据。

(4)将localStroage的数据同步服务器(数据冲突手动操作)。

(5)通过XML将服务器数据同步本地。

(6)本地没有数据直接同步服务器。

(7)服务器没有数据直接同步本地。

二、数据结构设计

WebSQL:数据库表。格式:items(id,name,num,user)

localStroage:Json数组对象。格式:

    [  {id:(new Date()).getTime(),table:'items',op:"insert",name:' ',num:' ',user:' '},

    {id:(new Date()).getTime(),table:'items',op:"update",name:' ',num:' ',user:' '},

    {id:(new Date()).getTime(),table:'items',op:"delete",name:' ',num:' ',user:' '}}    ……]

     其中,josns[0]代表同步数据的起点,josns[josns.length-1]代表数据同步的终点

XML:

    <store dtatbase="Item">
    <op id="0"/>
    <op id="1366526718040" table="items" action="insert">
        <data name="name">测试2   </data>
        <data name="user">    </data>
        <data name="num"> 测试2</data>
        <data name="spell">T</data>
   </op>
  <op id="1366526728408" table="items" action="update">
     <data name="name">测试3</data>
   </op>
</store>

三、同步顺序图


分析说明:

(1)LastSynTime:标识用户使用情况

  -1:表示用户在该浏览器中第一次使用。然后获取服务器是否有该用户信息,如果有则直接将服务器的数据更新到本地数据库。

不等于-1:表示用户已经操作过该浏览器。然后对syndata进行判断。

(2)syndata:表示需要同步的数据

-1:表示用户当前在该浏览器中没有同步数据。然后获取服务器是否有该用户信息,如果有则直接将服务器的数据更新到本地数据库。

不等于-1:表示用户在该浏览器中有同步数据。然后在进一步判断。

(3)id_start::为syndata[0].id,表示需要同步数据中第一个数据的操作时间戳。

id_end:为syndata[syndata.length-1],表示需要同步数据中最后一个数据的操作时间戳。

ID_END:为XML中最后一个操作数据的时间戳。

(1)若ID_End<id_start,,则将本地同步数据更新服务器数据库。

(2)若ID_End>id_end,则提取上一次同步操作数的最后一个操作时间戳id_end,从服务器获取id_end到ID_End的数据操作并更新到浏览器的webBD数据库。

(3)若id_start<ID_END<id_end,则id_start到ID_END为冲突数据需要用户手工矫正,并将ID_END到id_end更新服务器。

四、系统结构


五、用户界面































六、代码设计

1、服务端

1)、XML解析(dom4j)

(1)、获取XM存储的最后一个操作数据的时间戳(ID_END)

Element opElement = (Element) document.selectSingleNode("/store/op[last()]");
return opElement.attributeValue("id");

(2)、将JSON数组转化为XML:CretateOpXml(String json, String op, String table,String ID,String user)

        Element rootElement = dom.getRootElement();
Element opElement = rootElement.addElement("op");
opElement.addAttribute("id", ID);
opElement.addAttribute("table", table);
if (op != "delete") {
if (op == "insert") {
opElement.addAttribute("action", "insert");
} else if (op == "update") {

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值