Экспорт базы данных sqlite с возможностью записи - PullRequest
0 голосов
/ 11 октября 2018

Есть ли способ экспортировать базу данных с возможностью записи?Мне нужно использовать базу данных, которую я экспортировал с телефона, в приложении 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 Ответ

0 голосов
/ 12 октября 2018

Есть ли способ экспортировать доступную для записи базу данных?

Из вашего кода, если он работает, то это то, что вы делаете.Предполагается также, что вы гарантируете, что база данных не используется в другом месте и что она была закрыта.

То есть база данных SQLite представляет собой один файл, скопируйте этот файл и затем вы сможете использовать егоБаза данных в любом месте, где у вас есть SQLite.Записываемая / читаемая концепция (то есть getWritableDatabase v getReadableDatabase) является одной из наиболее распространенных заблуждений.Последний в большинстве случаев получит доступную для записи базу данных, он вернет базу данных только для чтения, если база данных также не может быть записана, например (полный диск).Согласно: -

Создать и / или открыть базу данных.Это будет тот же объект, возвращаемый функцией getWritableDatabase (), если для какой-либо проблемы, например, для полного диска, база данных должна быть открыта только для чтения.В этом случае будет доступен объект базы данных только для чтения.Если проблема устранена, будущий вызов getWritableDatabase () может завершиться успешно, и в этом случае доступный только для чтения объект базы данных будет закрыт, а объект чтения / записи будет возвращен в будущем.

getReadableDatabase

Исключения / соображения могут быть: -

  • Если база данных была зашифрована, в этом случае вы будете использовать код шифрования/ extension вместе с ключом.
  • Если вы используете временные таблицы в памяти, в этом случае И если вам нужны эти временные таблицы в памяти, вы можете создать копию базы данных, но изменитьв памяти / временно, чтобы быть постоянным.

    • SQLite имеет API резервного копирования, который делает это.Однако я не верю, что API-интерфейс SQLite в Android реализует API резервного копирования (поэтому попытка использовать его может оказаться более сложной, чем реализация метода копирования).
  • на Android, в базе данных будет дополнительная таблица с именем android_metadata , она просто хранит локаль и может быть проигнорирована в другом месте.

...