2010-10-14 122 views
10

我已经基本完成开发一个Android应用程序,它使用SQLite数据库,我复制到设备上的用户数据区域,例如/data/data/com.company.app/databases/users .dbAndroid处理应用程序更新和数据库更改

我不确定市场应用程序更新过程如何发生,我也不确定如何测试它。

我目前正在检查数据库是否存在于设备上,如果没有,则复制它(通常只在首次启动时才会出现)。如果我在更新的应用程序中有新版本的数据库,会发生什么情况?市场更新会擦除用户数据,以便在下次启动时复制我的新数据库?

如果我将数据库更改/添加记录/ etc并将其与新应用程序打包,将来会发生什么?这个数据库不会覆盖旧的数据库吗?

否则,为避免在每次启动时从应用程序包复制和覆盖数据库,是否有方法检查数据库文件的大小和日期,并且只有在数据库中的数据库较新时才能复制数据库文件的大小和日期?

如果有人需要澄清,请询问。

回答

12

我正在做类似的事情。我所做的是设置数据库版本,然后当我检查数据库是否存在时,我也要确保它是正确的版本。如果不是,我保存数据库中的用户收藏夹,擦除并重新复制数据库,然后放回用户收藏夹。

这是我上升级

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); 
+1

以及如何onUpgrade(..)被调用? – Nativ 2013-04-30 11:42:14

+0

@powerX onUpgrade在您增加数据库版本号时自动调用。 – ariets 2013-08-25 19:49:54

+0

是的,在它之后。谢谢 – Nativ 2013-08-26 07:54:55

相关问题