2016-03-13 27 views

回答

2

onUpgrade为您提供旧版本和新版本,并且您可以做任何您需要的操作。这里有一种方法: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上执行多个增量可执行文件?或者这些改变可以忽略不计 – DoubleBass

+0

这取决于你在做什么。我认为不管添加列是否便宜,但是如果您正在重建索引或某些内容,可能会对性能产生影响。我的猜测是,在大多数情况下,无论您是一次升级还是批量升级,它们都不会产生重大影响,如果您一次完成所有升级,代码可能会变得更加复杂,因为那样您需要覆盖每一个可能会分开升级。 1-> 2,1-> 3,1-4,2-> 3,2-> 4等。随着时间的推移它会变得更糟。 – nasch

0

是的,您可能需要从任何给定版本号到当前版本的升级路径。 onUpgrade()为您提供了一种方法来执行此操作,因为它为您提供旧版本号,您可以使用它来确定要执行哪些迁移以获得最新版本。

+0

是否有任何理由让新的版本号被传入?这与传递给构造函数中的super()调用的DB_VERSION参数不一样吗?这是否真的用于升级方法? – DoubleBass

+0

您通常不需要对新版本号进行任何操作。如果你需要它,你可以使用它。如果以某种方式发生配置更改以恢复最高的数字更改,那么可能很重要,然后需要后续升级才能执行某个特定版本。应用程序没有义务随时升级,因为它可能会以其他方式为条件。 –