安卓应用常用SQLite作为本地数据库,备份核心是将.db
文件复制到安全位置(如内部存储、SD卡或云端),需注意不同Android版本的存储权限限制。
步骤 | 说明 |
---|---|
获取数据库路径 | Context.getDatabasePath(String dbName).getPath() |
创建目标文件 | 如/sdcard/backup/mydb.db |
复制文件 | 使用FileInputStream 和FileOutputStream |
代码示例:
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上传,推荐使用AsyncTask
或WorkManager
处理后台任务。
关键步骤:
.db
文件压缩为ZIP(可选)MultipartBody
提交文件SQLiteDatabase.close()
)Android版本 | 存储权限 | 解决方案 |
---|---|---|
Android 10+ | 分区存储 | 使用MediaStore API或请求MANAGE_EXTERNAL_STORAGE 权限 |
Android 11+ | 更严格限制 | 建议使用应用专属目录(getExternalFilesDir() ) |
database.close()
释放锁解答:
每次升级DATABASE_VERSION
时,在SQLiteOpenHelper
的onUpgrade()
方法中保留向前兼容逻辑,备份时需同时记录数据库版本号,恢复时根据版本差异执行迁移操作。
解答:
DriveResourceClient
Bitmap
或PDF(不可直接上传.db文件) DriveApi.newDriveContents()
driveResourceClient.createFile()
上传