不同版本的APP,数据库结构变化后该如何处理?

来源:互联网 发布:马哥linux 2017网盘 编辑:程序博客网 时间:2024/06/05 16:42
如果是移动端, 视数据的重要性来定, 如果不重要, 那就忽视它. 如果重要, 就要额外做一个检查Documents(我这里假设你的数据文件放在Documents下)下的数据文件, 如果存在, 就SQL导出再加上按照新的数据结构导入到新的数据文件. 也就是两句SQL的事, 在升级后第一次进入应用的时候做这个事. 

如果是服务端, 正常情况还是需要做接口层(当然, 我也遇到没做接口层, 直接远程数据库操作的, 对这种, 我无话可说), 接口层的变动幅度, 往往没有数据层的变动大, 有时候, 哪怕数据结构变化了, 但接口层还是一样. 如果是碰到数据层变化逼迫接口层变化的情况, 那就需要保留老接口的同时, 提供新接口服务, 直到使用老接口的app保有量低到一定程度, 再关闭老接口. 我的产品接口, 是在接口中加上一个v(version)参数作为版本判断标志.


.首先我们需要把原来的数据库表重命名一下


public static final String SQL_ALTER_TABLE_NAME = "alter table "            + A + " rename to temp_A";

原来的表结构是:


private static final String SQL_CREATE_TABLE = "create table  if not exists "            + A + "(id integer primary key autoincrement,...)";

2.然后把备份表temp_A中的数据copy到新创建的数据库表A中,这个表A没发生结构上的变化


public static final String INSERT_SUBSCRIBE = "select 'insert into A (field1, field2...) values ('''||field1||''','''||field2||''',...)'  as insertSQL from temp_A";

3.此时临时表中的数据已经全部复制到了表A中,

4.删除备份表


public static final String DELETE_TEMP_TABLE = "delete from temp_A ";    public static final String DROP_TEMP_TABLE = "drop table if exists temp_A";

5.然后把数据库版本号改为比之前高的版本号,在OnUpgrade方法中执行上述语句就行.


1 0
原创粉丝点击