2015-01-20 84 views
0

我有一個問題,我想升級我的應用程序,但我不想丟失存儲的數據。Android升級應用程序不會丟失數據

的問題是,在我的數據庫代碼,我有這樣的:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + POINTS_TABLE); 
    db.execSQL("DROP TABLE IF EXISTS " + NETWORKS_TABLE); 
    onCreate(db); 
} 

我還以爲所有類型的數據備份,所以我至少可以保存數據,然後升級。問題是,我想我只是有兩個選擇:

一)根設備 B)通過USB

的問題是設備USB不起作用連接。我的電腦似乎無法識別它。

無論如何要保存我的數據嗎?我已經嘗試過應用程序Astro,超級備份,Titanium備份,但所有這些都需要root權限。問題是,我不能沒有USB電纜根。

我的平板電腦是三星Galaxy Tab 2 7.0。有小費嗎?

回答

3

onCreate你可以做"CREATE TABLE IF NOT EXISTS"

onUpdate需要

+0

我知道我可以做到,問題是,我仍然會失去我目前的數據,我不是嗎? – dex90 2015-01-21 10:18:26

+0

不,這樣你就不會丟失你的db數據,因爲任何現有的表格都不會在onCreate中修改。 – 2015-01-21 11:38:25

+0

事情是,當我嘗試更新我的應用程序時,它說:相同的軟件包,但簽名不同 – dex90 2015-01-21 11:41:57

0

這就是數據庫版本,而不是應用程序版本時,你可以做"ALTER TABLE"。如果您的數據庫結構正在改變,您可以製作更智能的升級路徑。從http://blog.adamsbros.org/2012/02/28/upgrade-android-sqlite-database/的例子將是:

public void onUpgrade(
     final SQLiteDatabase db, final int oldVersion, 
     final int newVersion) 
    { 
     int upgradeTo = oldVersion + 1; 
     while (upgradeTo <= newVersion) 
     { 
      switch (upgradeTo) 
      { 
       case 5: 
        db.execSQL(SQLiteSet.V5_ADD_LAST_CARD); 
        db.execSQL(SQLiteCard.V5_ADD_FAILED); 
        break; 
       case 6: 
        db.execSQL(SQLiteSet.V6_ADD_IMPORT_TYPE); 
        break; 
       case 7: 
        db.execSQL(SQLiteSet.V7_ADD_SHORT_FNAME); 
        break; 
      } 
      upgradeTo++; 
     } 
    } 
+0

但是當我更改我的應用程序版本時,是否也會更改我的db版本? – dex90 2015-01-21 10:19:17

+0

事情是,當我嘗試更新我的應用程序時,它說:相同的程序包但簽名不同 – dex90 2015-01-21 11:10:17

+0

這就是簽名密鑰。要麼使用來自兩個不同系統的調試密鑰,要麼嘗試在生產版本上安裝調試版本。 – bryan 2015-01-21 21:26:55

相關問題