gpt4 book ai didi

java - 用填充的数据库覆盖您的应用程序数据库

转载 作者:行者123 更新时间:2023-12-01 05:25:46 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

我想有一次我尝试按照你的方式做,但无法绕过它,最终放弃了这个简洁的解决方案。最后我做了:

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

return database;
}

这在SQLiteOpenHelper

关于java - 用填充的数据库覆盖您的应用程序数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com