我开发了一个已经存在GooglePlay
的应用程序,
现在我需要修改数据库中需要更多列的一些部分。
但是我遇到了问题,问题是当我发布新的 APK 更多列到playstore时,我在数据库中找不到那些新列,但是当我卸载时首先,然后我安装新的 APK ,问题就消失了,
如何修复此错误?
答案 0 :(得分:1)
您必须使用onUpgrade()
方法来反映本地和实时应用程序中的更改。
onUpgrade()
仅在数据库文件存在时调用,但存储的版本号低于构造函数中请求的版本号。 onUpgrade()
应将表架构更新为请求的版本。
在代码(onCreate()
)中更改表模式时,应确保更新数据库。两种主要方法:
删除旧数据库文件,以便再次运行onCreate()
。在开发时,您通常首选这种方法,您可以控制已安装的版本,并且数据丢失不是问题。删除数据库文件的一些方法:
卸载应用程序。使用应用程序管理器或shell中的adb uninstall your.package.name
。
清除申请数据。使用应用程序管理器。
增加数据库版本,以便调用onUpgrade()
。由于需要更多代码,因此稍微复杂一些。
对于数据丢失不成问题的开发时架构升级,您只需使用execSQL("DROP TABLE IF EXISTS <tablename>")
删除现有表并调用onCreate()
即可重新创建数据库。
对于已发布的版本,您应该在onUpgrade()
中实施数据迁移,这样您的用户就不会丢失数据。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion){
case 1:
db.execSQL("ALTER TABLE " + DATABASE_TABLE + " ADD COLUMN " + NEW_COLUMN_NAME + TYPE);
}
}