【问题标题】:How do I save a SQLite database with the .db extension?如何使用 .db 扩展名保存 SQLite 数据库?
【发布时间】:2014-05-11 11:41:18
【问题描述】:

这里是超级初学者。

我创建了一个 SQLite 数据库,我想使用 SQLiteManager 插件查看它,但我的数据库没有在我的(虚拟)设备上添加 .db 扩展名。到目前为止,我必须将文件复制到我的计算机上,更改扩展名,然后将其推回以启用 SQLiteManager 图标。然后我就可以看到数据库了。

我怎样才能避免这种跑路?

另外,有人提到我不应该依赖“/data/data/”作为正确的路径。他们建议我使用Context.openOrCreateDatabaseget*Pathget*Dir 方法之一。有人可以详细说明这些吗?我使用的代码来自我看到的一个 Youtube 教程。

这是定义路径的代码:

try {
        String destPath = "/data/data/" + getPackageName() + "/databases/GradesDB.db";
        File f = new File(destPath);
        if(!f.exists()) {
            CopyDB( getBaseContext().getAssets().open("mydb"),
                new FileOutputStream(destPath));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 您是否正在扩展 SQLiteOpenHelper 来创建您的数据库?如果是这样,您应该在构造函数中提供一个数据库名称,只需在该名称的末尾附加“.db”即可。
  • “我使用的代码来自我看到的一个 Youtube 教程。”:哎呀!需要记住的一件事 - 任何人 都可以制作视频并将其发布到 YouTube - 这并不意味着他们对自己在做什么一无所知。该代码在几个方面是错误的。切勿对文件系统路径进行硬编码(Android 设备制造商可以选择使用不同的目录结构)。此外,除非您有特定要求(并且知道其含义),否则您很少会使用 getBaseContext()
  • 谢谢,@panini!让数据库可以访问就是这么简单。还有@Squonk,我试图弄清楚为什么教程仍然包含这段代码。它到底有什么作用,有什么更好的方法?

标签: android sqlite file-management


【解决方案1】:

这不是在 android 上处理数据库的正确方法 使用本指南创建 dbhelper

guide

在此之后,您可以随意设置 db 文件名

【讨论】:

  • 你应该避免仅仅链接到场外资源,因为它们很容易被链接腐烂。最好提取相关信息并将其添加到您的答案中。
【解决方案2】:

你不应该依赖“数据/数据”,因为它可能会改变或者它可能无法在某些设备上运行,getDatabasePath (String name) 将始终返回正确的路径,文档说

返回使用 openOrCreateDatabase 创建数据库的文件系统上的绝对路径

【讨论】:

  • 嘿,我已经阅读了一些关于数据库设计的内容,并改进了我的代码实现。但是,我没有修复的一部分是我的原始帖子。我想我对它实际上做了什么以及我应该做什么感到困惑。如果数据库尚不存在,是否创建数据库?在这段代码在新的虚拟机上运行并且从未创建数据库文件之后,我发生了一次崩溃。
【解决方案3】:

我同意 I1nuxuser。这是另一个参考:https://github.com/jgilfelt/android-sqlite-asset-helper

【讨论】:

  • 你应该避免仅仅链接到场外资源,因为它们很容易被链接腐烂。最好提取相关信息并将其添加到您的答案中。
【解决方案4】:

我知道已经很晚了

首先使用这个依赖

    compile 'com.ajts.androidmads.sqliteimpex:library:1.0.0'

并使用此代码导出数据库

public static boolean exportDb(Context context, String databaseName) {

        File dbDir = new File(Environment.getExternalStorageDirectory(),"your_path");
        if (!dbDir.exists())
        {
            dbDir.mkdirs();
        }

        SQLiteImporterExporter sqLiteImporterExporter = new SQLiteImporterExporter(context, databaseName);
        try {
            sqLiteImporterExporter.exportDataBase(Environment.getExternalStorageDirectory()+"your_path");
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;

    }

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多