几个月前,我制作了一款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);
}
答案 0 :(得分:1)
将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 ();
}
}
答案 1 :(得分:0)
@yuvaツ提供的解决方案
如果您的设备运行的是Android v4或更高版本,则可以使用adb backup命令在不使用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数据库。
有关详细信息,请查看original blog post。