[英]Data from SQLite gets lost on application update
我的应用程序更新有问题。 所有用户设置都保存在键值表中的SQLite DB中。 在我将设置保留为共享首选项之前,但在更新时将其删除。 由于数据库可以安全更新,所以我移动了数据库中的所有设置,一切正常。 但不总是。 大多数情况下,更新时所有数据都会丢失。 如果以前删除了所有“数据”文件夹,那么现在仅删除数据库。 尽管从不调用onUpgrade
方法。 在Android清单中android:allowBackup="true"
和android:fullBackupContent="@xml/backup_descriptor"
这是我的backup_descriptor文件:
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="database"
path="." />
<include domain="sharedpref"
path="." />
</full-backup-content>
这是我的DBHelper
类的一部分:
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "create database");
db.execSQL("CREATE TABLE KV(name varchar(256) primary key, value varchar(256))");
fillSettings(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Обновление базы
Log.d(LOG_TAG, String.format("--- onUpgrade settings --- from %d to %d", oldVersion, newVersion));
if (newVersion > oldVersion) {
Log.d(LOG_TAG, "Обновление базы настроек!");
}
}
我试图通过adb,文件管理器甚至Play Market安装应用程序。 在每种情况下,都存在以下情况:例如,我安装了应用v8,进行了一些更改并将其保存。 然后,我将我的应用程序更新为v9并没有打开它,然后去检查文件(DB)是否存在,是否不存在。
我真的不明白为什么会发生这种情况,希望您能帮助我。 我试图在Stackoverflow上找到类似的东西,但是常见的问题是如何在更新时删除数据,而我无法保存它:(
UPD:我知道何时需要使用onUpgrage方法,并且了解其工作原理。 但是我不明白为什么系统会清除我设备上的数据。 我尝试在具有相同设备和操作系统版本(我的设备为Nexus 5x)的模拟器上对此进行测试,但未出现问题。 为什么? 我为语法道歉,我不太懂英语。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ADD_COLUMN_!);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ADD_COLUMN_2);
}
}
我发现本教程对SQlite升级最有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.