导出可写的 sqlite 数据库

有没有办法导出可写数据库?我需要在 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);

        }

    }

}


偶然的你
浏览 155回答 1
1回答

江户川乱折腾

有没有办法导出可写数据库?从您的代码中,假设它正在运行,那么这就是您正在做的事情。还假设您要确保该数据库未在其他地方使用并且已关闭。也就是说,SQLite 数据库是单个文件,复制该文件,然后您可以在拥有 SQLite 的任何地方使用该数据库。可写/可读的概念(即getWritableDatabasev getReadableDatabase)是更常见的误解之一。后者在大多数情况下会得到一个可写的数据库,如果数据库也不能写,例如(完整的磁盘),它只会返回一个只读的数据库。按照 :-创建和/或打开数据库。这将与 getWritableDatabase() 返回的对象相同,除非某些问题(例如磁盘已满)要求以只读方式打开数据库。在这种情况下,将返回只读数据库对象。如果问题得到解决,未来对 getWritableDatabase() 的调用可能会成功,在这种情况下,只读数据库对象将被关闭,读/写对象将在未来返回。获取可读数据库例外/注意事项是:-如果数据库已加密,在这种情况下,您将使用加密代码/扩展名和密钥。如果您使用内存/临时表,在这种情况下并且如果您需要这些内存/临时表,您可以创建一个副本数据库但将内存/临时表更改为永久。SQLite 确实有一个备份 API,它可以做到这一点。但是,我不相信 Android 中的 SQLite API 实现了备份 API(因此尝试使用它可能比实现复制方法更痛苦)。在 Android 上,数据库中会有一个名为android_metadata的附加表,它只存储区域设置,可以在其他地方忽略。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java