flutter - 将 .sqlite db 复制到电话上的文档目录
问题描述
我有一个例程将本地 SQLite 数据库(从 Android Studio Assets 文件夹)复制到手机的文档目录。
我遇到的问题是这段代码不是很好。有时数据库被完全复制,有时它被部分复制,或者根本不复制。它非常有问题,我不知道如何改进它。
很多时候我收到一个错误,说找不到某些表。
这是我使用的代码:
copyDB() async
{
// Construct a file path to copy database to
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, DBAssistanceClass.databaseName);
print('The DB path is: '+ path);
// Only copy if the database doesn't exist
if (FileSystemEntity.typeSync(path) == FileSystemEntityType.notFound)
{
try
{
print('Copying DB...');
// Load database from asset and copy
ByteData data = await rootBundle.load(
join('assets', DBAssistanceClass.databaseName));
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
// Save copied asset to documents
await File(path).writeAsBytes(bytes);
}
catch (error)
{
print(error);
}
}
}
这是为了颤振,我在飞镖文档中找不到任何可以帮助的东西。
解决方案
我认为在编写文件时刷新是否很重要。sqflite中有一个Opening an assets database文档,里面有一个完整的例子。
推荐阅读
- junit - InvalidUseOfMatchers 即使没有参数和匹配器是正确的
- c# - 当我单击 LinkButton 时,它不会调用函数“LinkButton_Click”
- javascript - 中心聚焦滑块
- python - 检查元组是否包含列表的任何元素,python
- azure - 使用自定义 order by 子句的 Cosmos DB 分页查询
- powershell - 从竹子运行的 PowerShell 脚本,给出错误您不能在空值表达式上调用方法
- c# - SMTP 服务器需要安全连接或客户端未通过身份验证 [BYAPR21CA0017.namprd21.prod.outlook.com]
- sqlite - 使用 sqlite 和颤振检索数据
- html - Angular 9 Bootstrap 轮播仍然没有任何效果
- spring - Spring Security OAuth2,如何自定义授权码和访问令牌