安卓数据库备份

4

几个月前,我制作了一个安卓应用。但当时我并没有想到需要备份我的数据库。现在,我确实需要备份,但我没有实现它。

现在,有没有什么方法可以让我备份数据库,而不会丢失数据?因为我认为如果我创建数据库备份的方法,在构建应用程序时,我将丢失所有数据,因为我有这个方法:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + POINTS_TABLE);
    db.execSQL("DROP TABLE IF EXISTS " + NETWORKS_TABLE);
    onCreate(db);
}

请尝试这个 - https://dev59.com/h2kw5IYBdhLWcg3wSorA#14686392 - yuva ツ
你修改了点表或网络表的模式吗?你想保留它们吗?如果你没有修改模式并且不想删除它们,那么你就不需要删除它们。 - Ben Pearson
我认为这是由于Android更新而改变了。 - dex90
2个回答

1

复制数据库文件到SD卡是一种备份方式

public static void copyFileInSDCard () {

    try {
        File sd = Environment.getExternalStorageDirectory ();
        File data = Environment.getDataDirectory ();

        if (sd.canWrite ()) {
            String DATABASE_NAME = "YOURDBNAME";
            String currentDBPath = "//data//your.package//databases//" + DATABASE_NAME;
            String backupDBPath = "FILE[Name]";
            File currentDB = new File (data, currentDBPath);
            File backupDB = new File (sd, backupDBPath);

            if (currentDB.exists ()) {
                @SuppressWarnings("resource")
                FileChannel src = new FileInputStream (currentDB).getChannel ();
                @SuppressWarnings("resource")
                FileChannel dst = new FileOutputStream (backupDB).getChannel ();
                dst.transferFrom (src, 0, src.size ());
                src.close ();
                dst.close ();
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace ();
    }
}

0

@yuvaツ提供的解决方案有效。

如果您的设备运行的是Android v4或更高版本,则可以使用adb备份命令提取应用程序数据(包括其数据库),而无需root,然后提取备份文件并访问sqlite数据库。

首先通过以下命令使用USB电缆将应用程序数据备份到您的PC上,将app.package.name替换为实际应用程序的包名称。

adb backup -f ~/data.ab -noapk app.package.name 这将提示您“解锁设备并确认备份操作”。不要为备份加密提供密码,以便稍后提取。在您的设备上单击“备份我的数据”按钮。屏幕将显示您正在备份的软件包的名称,然后在成功完成后自动关闭。

您的主目录中生成的data.ab文件包含以android备份格式存储的应用程序数据。使用以下命令提取它:

dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf - 结果是apps/app.package.name/文件夹,其中包含应用程序数据,包括sqlite数据库。

有关更多详细信息,请查看原博客文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接