【问题标题】:Backup/Restore Android App DB Managed By ORMLite备份/恢复由 ORMLite 管理的 Android App DB
【发布时间】:2014-01-16 08:48:17
【问题描述】:

我想在sdcard 上备份我的应用程序数据库,然后再导入它。 .sqlite 数据库由ORMLite 管理。我已经阅读了答案https://stackoverflow.com/a/20143148/335105,但是按照这种方法将删除导出后生成的当前数据库中的所有数据。

有没有一种方法可以将我的数据库导出到 sdcard,然后在不丢失已经包含的数据的情况下导入它?有什么建议吗?

【问题讨论】:

  • 不得不在现有应用程序上开发一个手动导入/导出系统,这并不好......叹息!!!

标签: android ormlite


【解决方案1】:

如果您知道以后不会更改数据模型,则可以创建数据库的“哑”导出。 DB作为文件存储在

public static final String CURRENT_DATABASE_PATH = "data/data/" + App.getContext().getPackageName() + "/databases/" + DatabaseHelper.DATABASE_NAME

其中 DATABASE_NAME 是您在创建数据库时使用的名称。

这是我使用的方法(我不是作者,这段代码受到了我现在找不到的其他一些 stackoverflow 线程的强烈启发) 出口:

public static void exportDB() {
    try {
        File dbFile = new File(CURRENT_DATABASE_PATH);
        FileInputStream fis = new FileInputStream(dbFile);
        getExportDirectory(); 
        String outFileName = createExportName();
        OutputStream output = new FileOutputStream(outFileName);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        output.flush();
        output.close();
        fis.close();
    } catch (Exception e) {
        App.log(e);
    }
}

再次导入

public static boolean importDB(String dbPath) {
        try {
            AppStorage.get().close();
            File newDb = new File(dbPath);
            File oldDb = new File(CURRENT_DATABASE_PATH);
            if (newDb.exists()) {
                copyFile(new FileInputStream(newDb), new FileOutputStream(oldDb));
                AppStorage.get().getWritableDatabase().close();
            }
            AppStorage.reset();
            return true;
        } catch (Exception e) {
            App.log(e);
        }
        return false;
    }

但是,如果您打算更新您的数据模型,这种方法将不起作用,因此您可能需要手动导出/导入您想要的所有内容。

编辑:AppStorage 是我的自定义数据库包装器。这种方法不会删除您的数据库。

【讨论】:

  • 在这种情况下,App 是一个扩展应用程序框架类的类。我在 App 类中持有对一般上下文的静态引用,因此它在应用程序中始终可用(可通过 getContext() 方法访问)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多