Skip to content

移动端数据库更新策略

ben7th edited this page Feb 11, 2014 · 7 revisions

目的

APP升级导致的业务变动,必然会有sqlite数据库中数据表结构的变化需求,当APP最新版本已经是5.0时,用户设备中的APP版本可能是1.0,2.0,3.0等等,当用户分别从这些版本升级到5.0时,如何平滑的升级用户设备中的APP数据库结构是一个需要考虑的问题

android

android app 数据库升级的基本机制

// APP数据库的基础声明
public class BaseDBHelper extends SQLiteOpenHelper {
  
    public BaseDBHelper(Context context, String name, CursorFactory factory,int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
      String sql = "create table ....";
      db.execSQL(sql);
    }

    // oldVersion 表示的是用户设备中对应APP的目录下的 sqlite 数据库数据文件的版本
    // newVersion 表示的是目前运行的APP需要的数据库版本,对应 构造方法中的 version
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists ...");
        // 在这里写 增加数据表,修改表结构,删除数据表,升级数据等操作
    }
}

//  类似如下的方式使用数据库

SQLiteDatabase db = new BaseDBHelper(context,DATABASE_NAME, null, CURRENT_DATABASE_VERSION).getWritableDatabase();

// SQLiteDatabase 对象上有查询,插入,升级,等对数据表进行操作的方法

解决方案

方案一

我们可以根据 onUpgrade 方法中的 oldVersion newVersion 两个参数为基础设计出 android app 数据库更新方案规范

方案二

找一个合适的 orm 框架,并使用orm 框架的更新方案,参考android app orm框架

方案三

使用 ActiveAndroid ORM 框架,配合自己编写的脚本来增加 migrations,参考android app 数据库更新方案规范三

Clone this wiki locally