将 .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 文档,其中包含完整示例。