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; } ListmultiuserDatabase.rar multiuserDatabase.rarupdateDbs=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,"升级成功"); } }