Android将现有数据库导入项目时出错

时间:2019-06-25 14:43:28

标签: android sqlite

在尝试将现有SQL数据库导入我的项目时遇到了一些问题。我将.db文件放在src / assets文件夹中,并按如下方式配置我的DBHandler:

public class DatabaseOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "test.db";
private static final int DATABASE_VERSION = 1;

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

但是,每当我尝试从表中进行原始查询时,Android都不会使用资产文件夹中的数据库,而是创建一个具有相同名称的空新表和一个仅名为android_metadata的表。

如何正确设置?

1 个答案:

答案 0 :(得分:2)

本质上,您需要将文件从资产文件夹复制到可用位置,通常是 data / data / your_packagae / databases / test.db

>

您发现,您提供的代码甚至不会考虑资产文件夹中的文件,因此在首次尝试打开数据库时(当您首次访问它时,因为没有尝试打开数据库)实例化DatabaseOpenHelper对象时创建一个数据库),这是一个没有表的新的空数据库(除了android_metadata表,它是由android SDK开放创建的一部分)。

仅在该位置不存在文件的情况下才应复制文件。

您可以使用SQLiteAssetHelper简化复制过程,注意这要求将要复制的文件位于资产文件夹的 databases 目录中(您可能必须创建数据库目录)。

或者,您可以使用自己的复制过程,this answer是一个做到这一点的示例(尽管演示/解释有些肿)。