首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android数据库备份

Android数据库备份
EN

Stack Overflow用户
提问于 2014-12-17 10:58:43
回答 2查看 138关注 0票数 4

几个月前,我开发了一个Android应用程序。但是在那个时候,我不认为我需要备份我的数据库。事实是,现在我知道了,但我没有实现它。

现在,我是否可以在不丢失数据的情况下进行数据库备份?因为我认为如果我创建数据库备份的方法,当我构建应用程序时,我会松散所有的数据,因为我有这样的方法:

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-17 14:10:16

@yuvaツ提供的解决方案起作用了

如果您的设备运行的是Android v4或更高版本,您可以使用亚行备份命令,不使用root就可以提取应用程序数据,包括它的数据库,然后提取备份文件并访问sqlite数据库。

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

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

主文件夹中生成的data.ab文件包含安卓备份格式的应用程序数据。要解压缩它,请使用以下命令:

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

有关更多细节,您可以查看原创博文

票数 0
EN

Stack Overflow用户

发布于 2014-12-17 11:37:21

将db文件复制到sdcard是备份的一种方法。

代码语言:javascript
复制
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 ();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27524009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档