比如旧表名称叫: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,查看数据库数据:
查看工具是在线查看,直接在app.build中配置,同步下:
dependencies {
debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
}
访问地址看logcat:
这个里面很方便看到数据库数据变化结果
刚才是初始化的时候数据库数据,我们看到里面只有account表,里面一条数据,这个时候我们比如说下个版本要升级数据库,修改account里面的字段,新增age字段,我们需要怎么做呢?
myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);
我们把最后一个参数改成2,这个时候运行后APP会自动执行onupgrade方法,并执行里面的4个步骤,
执行完后截图如下:
我们发现原来的account不见了,并且生产了个account_v1,但是里面数据都在还多了一个age字段,这就保证我们升级数据库的时候,数据不会丢失,并且还可以根据业务需求修改字段。