当前位置:首页 > 行业动态 > 正文

安卓开发数据库备份

安卓数据库备份基础

安卓应用常用SQLite作为本地数据库,备份核心是将.db文件复制到安全位置(如内部存储、SD卡或云端),需注意不同Android版本的存储权限限制。


本地备份方案

直接复制数据库文件

步骤 说明
获取数据库路径 Context.getDatabasePath(String dbName).getPath()
创建目标文件 /sdcard/backup/mydb.db
复制文件 使用FileInputStreamFileOutputStream

代码示例:

File dbFile = context.getDatabasePath("mydb.db");
File backupFile = new File(Environment.getExternalStorageDirectory(), "backup/mydb.db");
try (InputStream in = new FileInputStream(dbFile);
     OutputStream out = new FileOutputStream(backupFile)) {
    byte[] buffer = new byte[1024];
    int len;
    while ((len = in.read(buffer)) > 0) {
        out.write(buffer, 0, len);
    }
} catch (IOException e) {
    e.printStackTrace();
}

云端备份方案

上传至服务器/云存储

需将数据库文件转为字节流,通过HTTP/HTTPS上传,推荐使用AsyncTaskWorkManager处理后台任务。

关键步骤:

  1. .db文件压缩为ZIP(可选)
  2. 使用MultipartBody提交文件
  3. 处理网络异常和超时

数据库恢复流程

  1. 检查备份文件完整性(MD5校验)
  2. 停止数据库连接(SQLiteDatabase.close()
  3. 替换原数据库文件
  4. 重启应用重建数据库连接

权限与兼容性处理

Android版本 存储权限 解决方案
Android 10+ 分区存储 使用MediaStoreAPI或请求MANAGE_EXTERNAL_STORAGE权限
Android 11+ 更严格限制 建议使用应用专属目录(getExternalFilesDir()

注意事项

  1. 数据库锁定问题:操作前调用database.close()释放锁
  2. 大文件处理:分块读写避免OOM
  3. 加密需求:对敏感数据可先用AES加密再备份
  4. 版本兼容:Android 6.0+需动态申请WRITE_EXTERNAL_STORAGE权限

相关问题与解答

问题1:数据库版本升级后如何兼容备份?

解答
每次升级DATABASE_VERSION时,在SQLiteOpenHelperonUpgrade()方法中保留向前兼容逻辑,备份时需同时记录数据库版本号,恢复时根据版本差异执行迁移操作。

问题2:如何备份到Google Drive?

解答

  1. 使用Google Drive API创建DriveResourceClient
  2. 将数据库文件转为Bitmap或PDF(不可直接上传.db文件)
  3. 调用DriveApi.newDriveContents()
  4. 通过driveResourceClient.createFile()上传
    需在Google Cloud Console启用Drive API并配置OAuth 2.0认证