UpdateManager public void startUpdateDb(Context context) { UpdateDbXml updateDbxml=readDbXml(context); if(getLocalVersionInfo()) { //拿到当前版本 String thisVersion=getVersionName(context); //拿到上一个版本 String lastVersion=l
public void startUpdateDb(Context context)
{
UpdateDbXml updateDbxml=readDbXml(context);
if(getLocalVersionInfo())
{
//拿到当前版本
String thisVersion=getVersionName(context);
//拿到上一个版本
String lastVersion=lastBackupVersion;
UpdateStep updateStep=analyseUpdateStep(updateDbxml,lastVersion,thisVersion);
if(updateStep==null)
{
return;
}
List
updateDbs=updateStep.getUpdateDbs();
CreateVersion createVersion=analyseCreateVersion(updateDbxml,thisVersion);
try {
//更新每个用户的数据库
for (User user:userList)
{
String logicDbDir=parentFile.getAbsolutePath()+"/update"+"/"+user.getUser_id()+"/logic.db";
String logicCopy=bakFile.getAbsolutePath()+"/"+user.getUser_id()+"/logic.db";
FileUtil.CopySingleFile(logicDbDir,logicCopy);
}
//备份总数据库
String user=parentFile.getAbsolutePath()+"/user.db";
String user_bak=bakFile.getAbsolutePath()+"/user.db";
FileUtil.CopySingleFile(user,user_bak);
// 第二步:执行sql_before语句,删除以及备份相关旧表
executeDb(updateDbs, -1);
// 第三步:检查新表,创建新表
executeCreateVersion(createVersion,false);
Log.i(TAG, "第三步检查新表完成!");
// 第四步:从备份表中恢复数据,恢复后删除备份表
executeDb(updateDbs, 1);
}catch (Exception e)
{
}
// 第五步:升级成功,删除备份数据库
if (userList != null && !userList.isEmpty())
{
for (User user:userList)
{
String logicDbDir=parentFile.getAbsolutePath()+"/update"+"/"+user.getUser_id()+".db";
File file=new File(logicDbDir);
if(file.exists())
{
file.delete();
}
}
}
File userFileBak=new File(bakFile.getAbsolutePath()+"user_bak.db");
if(userFileBak.exists())
{
userFileBak.delete();
}
Log.i(TAG,"升级成功");
}
}
multiuserDatabase.rar
multiuserDatabase.rar
