将 .sqlite 数据库复制到 Phone 上的文档目录
Copying .sqlite db to documents directory on Phone
我有一个例程将本地 SQLite 数据库(从 Android Studio Assets 文件夹)复制到 phone 的文档目录。
我遇到的问题是这段代码不是很好。有时会完整复制数据库,有时会部分复制,或者根本不复制。它有很多问题,我不知道如何改进它。
很多时候我都收到一个错误,说找不到某些表。
这是我使用的代码:
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);
}
}
}
这是为了 flutter,我在 dart 文档中找不到任何帮助。
我觉得写文件的时候flush是否重要。 sqflite 中有一个 Opening an asset database 文档,其中包含完整示例。
我有一个例程将本地 SQLite 数据库(从 Android Studio Assets 文件夹)复制到 phone 的文档目录。
我遇到的问题是这段代码不是很好。有时会完整复制数据库,有时会部分复制,或者根本不复制。它有很多问题,我不知道如何改进它。
很多时候我都收到一个错误,说找不到某些表。
这是我使用的代码:
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);
}
}
}
这是为了 flutter,我在 dart 文档中找不到任何帮助。
我觉得写文件的时候flush是否重要。 sqflite 中有一个 Opening an asset database 文档,其中包含完整示例。