You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native应用本地SQLite存储与线上服务器数据同步及标记实现问询

调研信息采集工具离线数据同步实现方案

1. 本地SQLite同步标记字段设计

首先在本地存储表单数据的表中新增以下核心字段,用于维护同步状态:

  • record_id:本地记录唯一主键,自增即可,无需和后端ID绑定
  • enterprise_id:关联企业ID,用于定位归属企业
  • form_page_num:表单页码(取值1-5,对应拆分的5个页面),和enterprise_id组合即可唯一标识某家企业的某一页表单数据
  • sync_status:同步状态枚举,默认值为0:
    • 0 = 待同步
    • 1 = 同步成功
    • 2 = 同步失败(非网络原因的错误,比如参数非法、权限不足)
  • update_time:当前页数据最后修改时间戳,用于解决云端和本地的数据冲突
  • form_data:当前页100个输入项的序列化内容,建议用JSON格式存储

每次点击保存按钮时,若当时联网且同步到后端成功,直接将sync_status设为1;如果无网络或者同步接口请求失败,sync_status保持为0即可。

2. 网络恢复后的同步执行逻辑

  • 首先在应用全局注册网络状态监听回调,只要监听到网络从不可用切换为可用状态,就自动触发后台同步任务,注意同步任务必须放在子线程执行,避免阻塞UI交互。
  • 同步任务启动后,先从本地SQLite查询所有sync_status = 0的记录,按update_time升序排列,保证先修改的数据先同步,避免后提交的数据覆盖旧数据。
  • 逐条取出待同步记录,调用后端同步接口,将enterprise_id、form_page_num、form_data、update_time作为请求参数传给后端。
    • 接口返回成功:将当前记录的sync_status更新为1
    • 接口返回业务错误(比如参数错误、企业不存在):将当前记录的sync_status更新为2,可同时记录错误日志便于排查
    • 接口因网络波动请求失败:不修改sync_status,等待下一次同步触发时自动重试
  • 冲突处理逻辑:后端收到同步请求后,先查询当前enterprise_id+form_page_num对应云端数据的最后更新时间,若前端传的update_time晚于云端时间,直接覆盖云端数据;若云端时间更新,可根据业务需求选择返回冲突提示让用户选择保留版本,或者默认按时间最新的版本覆盖。

3. 你描述场景的适配效果

对应你举的具体场景,本地数据库会生成以下状态的记录:

  • 企业A的第1、2页:sync_status = 1(联网保存时已同步成功)
  • 企业A的第3、4、5页:sync_status = 0(离线保存未同步)
  • 企业B的2个填写过的页面:sync_status = 0(离线保存未同步)

网络恢复触发同步后,会按保存时间顺序先同步企业A的3个待同步页面,再同步企业B的2个待同步页面,所有页面同步成功后对应的sync_status都会更新为1,整个同步流程完成。

4. 可选优化点

  • 对于sync_status = 2的失败记录,可增加最多3次自动重试机制,超过重试次数再提示用户手动处理
  • 同步过程中可在UI角落增加弱提示(比如顶部小横幅、同步中图标),让用户感知到数据正在上传
  • 对于sync_status = 1的已同步记录,可定期清理超过30天的历史数据,避免本地数据库占用过多存储空间

内容的提问来源于stack exchange,提问作者STBox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:18:04