几个月前,我开发了一个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);
}发布于 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数据库。
有关更多细节,您可以查看原创博文。
发布于 2014-12-17 11:37:21
将db文件复制到sdcard是备份的一种方法。
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 ();
}
}https://stackoverflow.com/questions/27524009
复制相似问题