如果我更新我的应用程序正在使用的数据库表怎么办,例如,如果我引入另一个类或更改现有的类。现在,当用户更新应用程序时,如何将应用程序的任何现有数据库内容合并到新的数据库定义中?
问问题
993 次
2 回答
3
为此有一个抽象方法称为onUpgradeDatabase()。当 Android 认为您的数据库需要更新时,将调用此函数。这主要发生在您更改数据库版本号时。
在我最近的所有项目中,我都使用以下方法逐个版本升级用户手机上的数据库(即使从例如:版本 1 到版本 5,如果用户有一段时间没有更新应用程序):
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
updateDatabase(db, oldVersion + 1, newVersion);
}
private void updateDatabase(SQLiteDatabase db, int fromVersion, int toVersion) {
Log.i("Updating database from version " + fromVersion + " to " + toVersion);
for (int ver = fromVersion; ver <= toVersion; ver++) {
switch (ver) {
case 1:
handleDatabaseVersion1(db);
break;
case 2:
handleDatabaseVersion2(db);
break;
}
}
}
private void handleDatabaseVersion1(SQLiteDatabase db) {
// create initial tables and so on
}
private void handleDatabaseVersion2(SQLiteDatabase db) {
// here we extend the Users table with another two columns
}
如果您修改任何架构,包括新表、新列、修改的列类型以及任何您必须执行正确的 SQL 语句来更新所有内容而不删除所有用户的数据!假设您正在编写一个记事本应用程序,并且所有笔记都存储在数据库中。如果您修改 Notes 表,则不得删除用户的便笺,因此请小心处理这些数据。
于 2012-06-05T14:30:42.420 回答
1
你将不得不使用onUpgradeDatabase
在这种方法中,您可以更改表。
于 2012-06-05T14:17:45.163 回答