首页 > 解决方案 > 在 Flutter 中导入和替换 Sqlite 数据库时出错

问题描述

我在设备上的文档中有一个.db文件。它存储了一个特定的 Sqlite 数据库。我将如何导入该数据库文件并替换 Flutter 中的旧文件?它在 Documents 中始终具有相同的名称和相同的目的地。这是初始化原始数据库的 DbHelper.dart 中的代码,我正在寻找的是用文档中另一个数据库的 db 文件替换该代码。

  DatabaseProvider._();
  static final DatabaseProvider db = DatabaseProvider._();

  Database _database;


  Future<Database> get database async {
    print("database getter called");

    if (_database != null) {
      return _database;
    }

    _database = await createDatabase();

    return _database;
  }

  Future<Database> createDatabase() async {
    String dbPath = await getDatabasesPath();

    return await openDatabase(
      join(dbPath, 'oldDB.db'),
      version: 1,
      onCreate: (Database database, int version) async {
        print("Creating table");

        await database.execute(
          "CREATE TABLE $TABLE_PERSON ("
          "$COLUMN_ID INTEGER PRIMARY KEY,"
          
          ")",
        );}

在另一个页面上,我有一个按钮,例如IMPORT,我需要一个从 Documents 导入新数据库文件并替换旧数据库文件并持久保存的功能。我将如何以最简单的方式去做呢?

这是我认为可以工作的功能,但我收到了异步错误和更多奇怪的错误:

 class DbHelper {
  Future initDb() async {
    final dbPath = await ExtStorage.getExternalStoragePublicDirectory(
        ExtStorage.DIRECTORY_DOCUMENTS);
    final path = join(dbPath, 'backup.db');
    final exist = await databaseExists(path);
    if (exist) {
      print('db imported');
      await openDatabase(path);
    
    }
    await openDatabase(path);
  }
}

标签: flutterdart

解决方案


推荐阅读