备份/恢复由ORMLite管理的Android应用程序数据库

备份/恢复由ORMLite管理的Android应用程序数据库,android,ormlite,Android,Ormlite,我想在SD卡上备份我的应用程序数据库,然后导入它。数据库由管理员管理。我已经阅读了答案,但按照该方法将删除导出后生成的当前db中的所有数据 是否有一种方法可以将数据库导出到SD卡,然后在不丢失已包含的数据的情况下导入它?建议?如果您知道以后不会更改数据模型,您可以创建数据库的“哑”导出。数据库作为文件存储在数据库中 public static final String CURRENT_DATABASE_PATH = "data/data/" + App.getContext().getPacka

我想在SD卡上备份我的应用程序数据库,然后导入它。数据库由管理员管理。我已经阅读了答案,但按照该方法将删除导出后生成的当前db中的所有数据


是否有一种方法可以将数据库导出到SD卡,然后在不丢失已包含的数据的情况下导入它?建议?

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

public static final String CURRENT_DATABASE_PATH = "data/data/" + App.getContext().getPackageName() + "/databases/" + DatabaseHelper.DATABASE_NAME
其中DATABASE_NAME是创建数据库时使用的名称

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

又是进口

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是我的自定义db包装器。这种方法不会删除您的数据库。

必须在现有应用程序上开发手动导入/导出系统,这不太好。。。唉!!!在本例中,App是一个扩展应用程序框架类的类。我在类App中持有对常规上下文的静态引用,因此它在App中始终可用(可通过getContext()方法访问)
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;
    }