Skip to content

移动端数据库更新策略

fushang318 edited this page Feb 10, 2014 · 7 revisions

目的

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

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需要的数据库版本
    @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 两个参数为基础设计出数据库 migrate 方案

或者看看有没有什么开源的 orm 方案中,已经解决了这个问题

Clone this wiki locally