用填充的数据覆盖您的应用数据库

时间:2012-03-13 18:02:03

标签: java android database file-io

我正在使用此博客文章中介绍的方法为我的Android应用创建初始填充数据库。

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

该博客介绍了如何使用存储在assets文件夹中的数据库文件并将其复制到应用程序的数据库文件夹中。我虽然使用了一种变体。我想在框架中运行良好,并在我的SQLiteOpenHelper实现的onCreate()和onUpdate()函数中调用复制函数。这最初有效:当我从模拟器中提取数据库文件时,我可以验证数据库是否在我的数据库的标准位置上正确复制。

现在奇怪的是,在第一次调用SQLiteOpenHelper.getWritableDatabase()之后,我也有一个断点。当我在该断点处拉取文件时,除了标准的Android表'android_metadata'之外,数据库是空的。

Android以某种方式覆盖文件,或文件未正确保存在文件系统上。有没有人知道我在哪里寻找解决方案?

1 个答案:

答案 0 :(得分:0)

是的,这将会发生,因为在oncreate的构造函数中调用了onUpgradeSQLiteOpenHelper。他们可以在传入的数据库对象上进行编辑,但构造函数将继续进一步修改数据库(例如,添加android_metadata表)。这可能会覆盖您的复制粘贴文件。

我想我曾经尝试过你的方式,无法绕过它,最后放弃了整洁的解决方案。最后我最终做了:

public SQLiteDatabase getSQLiteDatabase() {
    SQLiteDatabase database = getReadableDatabase();
    if(!isDatabaseCopied) {
        copyDatabase();
        isDatabaseCopied = true;
        database = getReadableDatabase();
    }

    return database;
}

这在SQLiteOpenHelper