繁体   English   中英

来自SQLite的数据在应用程序更新时丢失

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM