三分钟搞定Android数据库升级

三分钟搞定Android数据库升级

比如旧表名称叫:account,重命名表名称叫:account_temp

步骤如下:

1:rename旧表名称把account改成account_temp

2:创建新表,表名称和原表名称一致也叫account或者其他名字account_v1

3:复制旧表account_temp(改名字后的表)数据到新表account_v1 中

4:Drop掉旧表


更新数据库前提是数据库版本要大于当前版本,在初始化Application的onCreate中执行:

myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);

参数1是上下文context,

参数2是数据库名称,

参数3是一个用于返回Cursor的工厂,该参数为NULL, 表示使用默认的工厂

参数4是数据库版本,


如果大于当前数据库版本号,会自动执行

SQLiteOpenHelper子类中的onUpgrade方法,我们可以把以上4步直接写在这个方法中:

备注:account 是原表名称 ,account_temp是重命名后表名称

//1:重命名表名称
String renameTable = "alter table account rename to account_temp";
//2:创建新表
String newTable = "create table account_v1 ("
        +"id integer primary key autoincrement,"
        +"name text,"
        +"account text,age integer)";
//3:复制旧表数据到新表
String copyTable = "insert into account_v1(id, name,account) select id,name,account from account_temp";
//4:删除旧表
String dropTable = "drop table account_temp";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if(newVersion > oldVersion){
            //升级数据库前备份数据
            db.execSQL(renameTable);
            db.execSQL(newTable);
            db.execSQL(copyTable);
            db.execSQL(dropTable);
        }
}

数据库版本开始是1,查看数据库数据:

三分钟搞定Android数据库升级_第1张图片

 

查看工具是在线查看,直接在app.build中配置,同步下:

dependencies {
    debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
}

访问地址看logcat:

三分钟搞定Android数据库升级_第2张图片

这个里面很方便看到数据库数据变化结果

刚才是初始化的时候数据库数据,我们看到里面只有account表,里面一条数据,这个时候我们比如说下个版本要升级数据库,修改account里面的字段,新增age字段,我们需要怎么做呢?


myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);

我们把最后一个参数改成2,这个时候运行后APP会自动执行onupgrade方法,并执行里面的4个步骤,

执行完后截图如下:

三分钟搞定Android数据库升级_第3张图片

我们发现原来的account不见了,并且生产了个account_v1,但是里面数据都在还多了一个age字段,这就保证我们升级数据库的时候,数据不会丢失,并且还可以根据业务需求修改字段。

你可能感兴趣的:(Android数据库,Android,数据库)