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