1、安卓sqlite3数据库跨版本升级操作
直接安装最新版本的APP,走onCreate方法,所以在数据库版本修改升级的时候,修改onCreate方法创建最新的数据库表格;
APP升级操作,数据库有变更的话:走onUpgrade方法,在此方法里面,判断旧的APP版本号,根据不同版本号的数据库,进行一个循环操作,循环从当前版本APP到要升级版本APP的版本,添加进来每一版数据库所做的操作。做相应的添加字段处理。
/**
* 新版本比旧版本高就会走这个方法
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
for (int i = oldVersion; i < newVersion; i++) {
switch (i) {
case DataBaseConfig.DATABASE_FIRST_VERSION:
updateUpgradeToVersion2(db);//修改表原有字段并新增字段
break;
default:
break;
}
}
}
private void updateUpgradeToVersion2(SQLiteDatabase db) {
try{
db.beginTransaction();
// 1, 将表TABLE_TEST1重命名为TABLE_TEST1+"_temp"
String tempTableName = DataBaseConfig.TABLE_TEST1 + "_temp";
String sql = "ALTER TABLE " + DataBaseConfig.TABLE_TEST1 + " RENAME TO " + tempTableName;
db.execSQL(sql);
// 2, 创建用户表(字段id、name改变、并新增了以个字段phone)
db.execSQL(DataBaseConfig.NEW_VERSION_INFO);
// 3, 将旧表数据导入到新表中,旧表中的id,name,age分别查到新表中的id,name,sign
sql = "INSERT INTO " + DataBaseConfig.TABLE_TEST1 + " (" + "id,name,sign" + ") " + " SELECT " + "id,name,age" + " FROM " + tempTableName;
db.execSQL(sql);
// 4, 删除旧的表
db.execSQL("DROP TABLE IF EXISTS " + tempTableName);
db.setTransactionSuccessful();
db.setVersion(2);
}catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally {
db.endTransaction();
}
}
realm数据版本升级
litpale数据库版本升级