android sqlite服务器,android sqlite客户端单向同步服务端sqlite(客服端保持和服务端一致)...

当前项目遇到一个需求 多个android sqlite客户端的数据要保持和服务端的sqlite数据保持一致(即不考虑客户端的自主修改数据,只考虑当服务端数据跟新时所有客户端数据要和服务端数据保持一致)

看了很多文章,得到的结果都是使用版本号来控制。但是版本号控制在数据更新频繁的情况下会有太多版本比较麻烦

所以想了以下思路来保证客户端 的数据 根据服务端数据做增量更新

客户端服务端sqlite表设计如下

建表语句

create table client(id int primary key,content char,status int,time_up TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP);

id

content

status

time_up

自增字段

字段内容

状态

0:正常 1:删除 2修改

最后操作时间戳

假设客户端初始数据如下

id

content

status

time_up

1

XXX

0

10

2

aaaa

0

20

服务端初始数据如下

id

content

status

time_up

1

XXX

0

10

2

aaaa

0

20

每次客户检查更新时获取3个数据来检查是否需要更新

1.检查是否有新增数据

select * from client where status=0 order by strftime('%s',time_up) desc limit 1;

改语句返回ID为2的记录

2.检查是否有数据删除 这里的删除用软删除(做个标记方便之后恢复)

select * from client where status=1 order by strftime('%s',time_up) desc limit 1;

这里返回空记录

3.检查是否有数据修改

select * from client where status=2 order by strftime('%s',time_up) desc limit 1;

这里返回空记录

向服务器发送的参数可以拼接为

add=20为 检查新增语句获取到的最新时间戳 up 和del 本地无数据所以发送0 通知服务器不做处理

XXX?add=20&up=0&del=0

服务端操作

获取到

add=20

up=0

del=0

3个参数后分别做相应操作 下面例子$表示引用

检查新增

select * from client where status=0 and strftime('%s',time_up)>$add

检查删除

select * from client where status=1 and strftime('%s',time_up)>$up

检查修改

select * from client where status=2 and strftime('%s',time_up)>$del

获取到的结果为所有客户端需要更新的结果集

如上图数据 客户端和服务端数据一致情况下 3条语句返回空结果 ,不需要更新

重点在下面 服务端的增删改操作

当服务器新增数据时status 设置为0 time一样为当前时间

某条数据被修改时把status 设置为2 time为修改时间

删除数据时候 status 设置为1 time 为修改时间

例如

对服务器数据进行增删该后数据如下

id

content

status

time_up

1

XXX-del

1

30

2

aaaa-up

2

40

3

newxxx

0

50

服务端数据改变 而客户端数据未变动的情况下 服务端再次执行检查语句

检查新增

select * from client where status=0 and strftime('%s',time_up)>$add

获取到记录3

检查删除

select * from client where status=1 and strftime('%s',time_up)>$up

获取到记录2

检查修改

select * from client where status=2 and strftime('%s',time_up)>$del

获取到记录1

把获取到的记录 返回语句 或者 json(看个人情况)给到客户端

这样就可以分别检查新增 删除 修改的3个数据了

欢迎各位大佬发表看法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好用的SQLiteSpy 1.8.16 免费正式版(内附有一做好的DB,大家可以马上看下效果)。网上看到的,整理了下,共享给大家! 希望有用! SQLiteSpy是一个快速和紧凑的图形用户界面的SQLite数据库管理软件。它可以读取sqlite3文件并执行SQL。图形用户界面使得它很容易分析和操纵sqlite3的数据库。 注意:SQLiteSpy是免费供个人和教育用途,SQLiteSpy主要特点: 1、数据库一览:树状显示所有的架构,包括表,列,索引和触发器在数据库中包含的项目。按F5更新架构树,双击一个表或视图来显示它的数据,使用常用的命令的上下文菜单。 2、网格单元格编辑:表格单元格中编辑,显示一个表通过树状架构,选择一个单元格,然后按F2键调用编辑器。然后修改并确认您的更改写回到表里。 3、数据类型显示:本机的SQL数据类型显示不同的背景颜色来帮助检测类型错误。类型错误可能会导致性能下降或错误的SELECT结果集,防止NULL值与空字符串混淆。 4、完全的Unicode: SQLiteSpy具有完全支持SQLite的Unicode的能力。数据显示和输入是完全实现为Unicode,包括SQL命令。 5、多个SQL编辑:现代标签是用来编辑和显示的查询语句和结果比较容易多个SQL查询。 SQL查询执行输入或加载到SQL他们编辑。然后按F9键运行该查询,或Ctrl + F9来运行当前行或选择只。 6、时间测量: SQL执行的时间会自动测量和显示,以帮助优化查询。 7、正则表达式:在SQL关键字regexp是支持,并增加了完整的Perl的正则表达式语法5.10 SQLiteSpy。的实施,实现了利用DIRegEx库。 8、数学SQL函数:下面的SQL函数可用数学除了SQLite的默认:ACOS(), ASIN(), ATAN(), ATAN(), ATAN2(), CEIL(), CEILING(), COS(), COT(), DEGREES(), EXP(), FLOOR(), LN(), LOG(), LOG(), LOG2(), LOG10(), MOD(), PI(), POW(), RADIANS(), SIGN(), SIN(), SQRT(), TAN(), TRUNCATE(). 9、数据压缩:压缩的SQL函数()适用的zlib的紧缩到任何文本或BLOB值。 10、紧凑型结果储存:使用内部数据存储机制,以达到最佳的兼容SQLite的原生数据类型。因此,SQLiteSpy使用远低于其它的SQLite管理内存和更有效地处理大量的表。 11、内建的SQLite引擎: SQLiteSpy已建成一个单一的应用程序文件与SQLite数据库引擎可执行文件。不需要部署任何DLL文件,这使得SQLiteSpy更易于部署。 12、加密支持: SQLiteSpy可以阅读和修改加密的数据库文件由DISQLite3产生。 DISQLite3实现了自己的母语AES加密。这为不符合商业SQLite的加密扩展(SSE)的或任何其他第三方的实施提供兼容。 13、易安装和卸载:要运行SQLiteSpy,只需解压SQLiteSpy.exe文件到任何目录和执行文件。不需要安装。刚开始时,该程序创建一个文件SQLiteSpy.db3(1 sqlite3的数据库)来存储的和设置。它不写任何其他文件或注册表。卸载一样只是简单的删除两个文件:应用程序的可执行文件和数据库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值