为了账号安全,请及时绑定邮箱和手机立即绑定

导出可写的 sqlite 数据库

导出可写的 sqlite 数据库

偶然的你 2021-11-11 18:14:14
有没有办法导出可写数据库?我需要在 Visual Studio 应用程序中使用从手机导出的数据库作为系统的一部分。我知道这很糟糕,但这是我唯一可以做的项目。这是我用来从SQLiteImporterExporter库中导出数据库的代码public void exportDataBase(String path) {    InputStream myInput = null;    OutputStream myOutput = null;    try {        String inFileName = DB_PATH + DB_NAME;        myInput = new FileInputStream(inFileName);        String outFileName = path + DB_NAME;        myOutput = new FileOutputStream(outFileName);        byte[] buffer = new byte[1024];        int length;        while ((length = myInput.read(buffer)) > 0) {            myOutput.write(buffer, 0, length);        }        if (exportListener != null)            exportListener.onSuccess("Successfully Exported");    } catch (Exception e) {        if (exportListener != null)            exportListener.onFailure(e);    } finally {        try {            // Close the streams            myOutput.flush();            myOutput.close();            myInput.close();        } catch (Exception ex) {            if (exportListener != null)                exportListener.onFailure(ex);        }    }}
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

有没有办法导出可写数据库?

从您的代码中,假设它正在运行,那么这就是您正在做的事情。还假设您要确保该数据库未在其他地方使用并且已关闭。

也就是说,SQLite 数据库是单个文件,复制该文件,然后您可以在拥有 SQLite 的任何地方使用该数据库。可写/可读的概念(即getWritableDatabasegetReadableDatabase)是更常见的误解之一。后者在大多数情况下会得到一个可写的数据库,如果数据库也不能写,例如(完整的磁盘),它只会返回一个只读的数据库。按照 :-

创建和/或打开数据库。这将与 getWritableDatabase() 返回的对象相同,除非某些问题(例如磁盘已满)要求以只读方式打开数据库。在这种情况下,将返回只读数据库对象。如果问题得到解决,未来对 getWritableDatabase() 的调用可能会成功,在这种情况下,只读数据库对象将被关闭,读/写对象将在未来返回。

获取可读数据库

例外/注意事项是:-

  • 如果数据库已加密,在这种情况下,您将使用加密代码/扩展名和密钥。

  • 如果您使用内存/临时表,在这种情况下并且如果您需要这些内存/临时表,您可以创建一个副本数据库但将内存/临时表更改为永久。

    • SQLite 确实有一个备份 API,它可以做到这一点。但是,我不相信 Android 中的 SQLite API 实现了备份 API(因此尝试使用它可能比实现复制方法更痛苦)。

  • 在 Android 上,数据库中会有一个名为android_metadata的附加表,它只存储区域设置,可以在其他地方忽略。


查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信