Android数据库备份

Android数据库备份,android,android-sqlite,Android,Android Sqlite,几个月前,我制作了一个Android应用程序。但当时,我并不认为我需要备份我的数据库。事实是,现在我做了,但我没有实施它 现在,我是否可以在不丢失数据的情况下进行数据库备份?因为我认为如果我为我的数据库备份制定方法,当我构建应用程序时,我会丢失所有数据,因为我有这个方法: public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS "

几个月前,我制作了一个Android应用程序。但当时,我并不认为我需要备份我的数据库。事实是,现在我做了,但我没有实施它

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

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);
}

将数据库文件复制到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 ();
    }
}

@yuva提供的解决方案ツ 工作

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

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

adb备份-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数据库


有关更多详细信息,您可以查看。

尝试此操作-您是否修改了点表或网络表的架构?你想留着它们吗?如果您还没有修改模式,并且不想删除它们,那么您不需要删除它们?我认为Android update已经改变了这一点。