2015-01-20 65 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

相关问题