Android处理应用程序更新和数据库更改
-
30-09-2019 - |
题
我基本上已经完成了一个使用SQLITE数据库的Android应用程序,该应用程序我将其复制到设备上的用户数据区域EG/Data/data/com.com.company.app/databases/users.db
我不确定如何进行市场应用程序更新过程,也不确定如何测试它。
我目前检查数据库是否存在于设备上并在不存在的情况下复制(通常仅在首次启动时发生)。如果我在更新的应用中有新版本的数据库,会发生什么?市场更新会擦除用户数据,以便在下一个启动时复制我的新数据库吗?
如果我进行数据库更改/添加记录/等,将来会发生什么?该数据库不会覆盖旧数据库?
否则,为避免在每个启动时从应用程序捆绑包中复制和覆盖数据库,是否可以检查数据库文件的大小和日期,并且仅在捆绑包中的数据库更新时复制?
如果有人需要澄清,请询问。
解决方案
我正在做类似的事情。我所做的是设置数据库版本,然后当我检查数据库是否存在时,我还确保它是正确的版本。如果不是这样,我将用户收藏夹从数据库中保存,擦除并恢复我的数据库,然后放回用户收藏夹。
这是我的升级
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 2) {
System.out.println("Performing upgrade!");
openDataBase();
// save the old favorites
Cursor mCursor = getFavorites();
ArrayList<Stop> favs = allCursorToStops(mCursor);
mCursor.close();
deleteRecreate(db);
openDataBase();
for (int i = 0; i < favs.size(); i++)
setFavorite(favs.get(i));
close();
} else {
deleteRecreate(db);
}
}
这是我检查存在/如果需要升级等的地方
boolean dbExist = checkDataBase();
if(dbExist){
// check if we need to upgrade
openDataBase();
int cVersion = myDataBase.getVersion();
close();
if(cVersion != VERSION)
onUpgrade(myDataBase, myDataBase.getVersion(), VERSION);
不隶属于 StackOverflow