gpt4 book ai didi

android - 将数据库从/ Assets 复制到应用程序私有(private)存储的正确方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:18 32 4
gpt4 key购买 nike

我在 /assets 目录中有模板数据库。此数据库必须复制到位于私有(private)存储区域中的主应用程序数据库。

现在,我在 Internet 上看到的所有样本对我来说都很奇怪。即,它们都扩展了 SQLiteOpenHelper,然后创建了初始化和复制方法,但onCreateonUpgrade 方法留空

这看起来不像是正确的方法,但我已经在 StackOverflow 和 Internet 博客上的多个线程中将其视为一个答案。

这真的是正确的方法吗?因为我想从 onCreate(在扩展 SQLiteOpenHelper 的类中)中进行处理,所以我首先创建一个与模板数据库匹配的数据库,然后填充它使用模板数据库中的数据。

最佳答案

我建议使用 SQLiteAssetHelper 库:

它已成为该技术的标准,并为您完成所有艰苦的工作。

集成到您的项目中就像包含 1 个 jar 文件一样简单。


例如,这是我的数据库助手类 - 如您所见,它继承自 SQLiteAssetHelper,但我无需编写任何代码即可从 中复制数据库/assets 目录。这一切都为我处理了。

public class DbHelper extends SQLiteAssetHelper
{
private static final String DATABASE_NAME = "NameOfDbFile.sqlite";
private static final int DATABASE_VERSION = 2;

public DbHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);

// delete old database when upgrading
setForcedUpgrade(DATABASE_VERSION);
}


// ... and below a basic query as if it was any old SQLiteOpenHelper subclass

public Cursor getUsers()
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

qb.setTables(User.TABLE);
Cursor c = qb.query(db, User.COLUMNS, null, null, null, null, null);

c.moveToFirst();
return c;
}

// etc...
}

一开始我很犹豫要不要为此使用一个库,但它使用起来真的很简单。


但是,如果你想自己重做这些工作,那么你可以看看这个库是如何做的,因为它在 Github 上是开源的。

关于android - 将数据库从/ Assets 复制到应用程序私有(private)存储的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23579910/

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