如何用FileChooser选择的外部SQLite数据库替换本地库并指定存储路径
解决SQLite数据库替换与跨设备共享问题
一、修改代码将数据库保存到AppHomePath/database目录
你需要先确保database目录存在,再指定完整的相对路径来保存文件。修改后的代码如下:
String selectedDbPath = "file:///tmp/temp11455781152272037918.db"; Storage storage = Storage.getInstance(); // 创建database目录(如果不存在) storage.mkdir("database"); // 打开选中文件的输入流 InputStream input = FileSystemStorage.getInstance().openInputStream(selectedDbPath); // 指定保存到database目录下的DbName.db OutputStream output = storage.createOutputStream("database/DbName.db"); // 执行复制 Util.copy(input, output); // 关闭流(避免资源泄漏) input.close(); output.close();
关键说明:
- 调用
storage.mkdir("database")确保目标目录存在,否则直接写入子路径会抛出异常 - 将输出路径改为
"database/DbName.db",即可让文件保存到AppHomePath下的database子目录中
二、实现数据库跨设备共享的思路
仅替换本地数据库只能完成单设备的文件替换,要实现设备A修改后设备B能同步,需要额外的同步机制:
- 云存储同步:将数据库文件上传到云存储服务,所有设备从云存储拉取最新版本,本地修改后自动上传更新。需处理多设备同时修改的冲突,可通过版本号、时间戳判断内容优先级。
- 第三方同步服务集成:集成Dropbox、Google Drive等同步服务,将数据库文件放在服务的同步目录中,App监听文件变化事件,自动加载最新版本。
- 自建同步后端:搭建简单的后端接口,提供数据库文件的上传、下载功能,设备定期检查更新或接收实时修改推送。
注意:SQLite是单文件数据库,跨设备同步时要避免多设备同时写入导致文件损坏,建议同步前锁定文件,或采用增量同步(仅同步修改内容)替代全量文件替换。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

