【问题标题】:Android error importing existing Database into projectAndroid错误将现有数据库导入项目
【发布时间】:2023-03-08 22:41:01
【问题描述】:

我在尝试将现有 SQL 数据库导入我的项目时遇到了一些问题。我在 src/assets 文件夹中找到了 .db 文件,并像这样配置了我的 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 的表。

如何正确设置?

【问题讨论】:

  • 我认为你不能从资产中引用那个。我认为您可能必须将文件复制到正确的目录中。
  • 按照惯例,哪个是正确的目录?我在某处读到 SQLiteOpenHelper 默认使用一个。
  • 它在“设备的内部存储”上。来自内存的路径是data/data/{your package name}/databases/

标签: android sqlite


【解决方案1】:

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

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

仅当该位置不存在该文件时才应复制该文件。

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

您也可以使用自己的复制过程,this answer 就是一个例子(尽管它对于演示/解释来说有点臃肿)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2014-08-13
    • 2021-06-05
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多