当增加版本号时,onUpgrade()被SQLite调用,所以通常你有一个create-table SQL语句和一个alter-table SQL语句。在Android中处理SqLite的多个升级(ALTER vs. CREATE)
如果有多个版本,您是否需要声明多个alter-table语句?
当增加版本号时,onUpgrade()被SQLite调用,所以通常你有一个create-table SQL语句和一个alter-table SQL语句。在Android中处理SqLite的多个升级(ALTER vs. CREATE)
如果有多个版本,您是否需要声明多个alter-table语句?
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++;
}
}
是的,您可能需要从任何给定版本号到当前版本的升级路径。 onUpgrade()为您提供了一种方法来执行此操作,因为它为您提供旧版本号,您可以使用它来确定要执行哪些迁移以获得最新版本。
是否有任何理由让新的版本号被传入?这与传递给构造函数中的super()调用的DB_VERSION参数不一样吗?这是否真的用于升级方法? – DoubleBass
您通常不需要对新版本号进行任何操作。如果你需要它,你可以使用它。如果以某种方式发生配置更改以恢复最高的数字更改,那么可能很重要,然后需要后续升级才能执行某个特定版本。应用程序没有义务随时升级,因为它可能会以其他方式为条件。 –
我只是在大声思考,但在实践中,如果表很大,这是否会有任何性能下降,像这样在db上执行多个增量可执行文件?或者这些改变可以忽略不计 – DoubleBass
这取决于你在做什么。我认为不管添加列是否便宜,但是如果您正在重建索引或某些内容,可能会对性能产生影响。我的猜测是,在大多数情况下,无论您是一次升级还是批量升级,它们都不会产生重大影响,如果您一次完成所有升级,代码可能会变得更加复杂,因为那样您需要覆盖每一个可能会分开升级。 1-> 2,1-> 3,1-4,2-> 3,2-> 4等。随着时间的推移它会变得更糟。 – nasch