Заменить базу данных в новой версии приложения - PullRequest
0 голосов
/ 16 января 2019

Я создаю приложение с существующим файлом базы данных. После первого запуска БД копируется из папки asstets. Я хотел бы иметь возможность заменить базу данных, но только если она изменилась. Я пытался использовать параметр версии в функции openDatabase (), но он не работает.

initDB() async {
    String databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'db.sqlite');

    Database db;
    try {
      db = await openDatabase(path, readOnly: false);
    } catch (e) {
      print("Error $e");
    }
    if (db == null) {
      // Should happen only the first time you launch your application
      print("Creating new copy from asset");

      // Copy from asset
      ByteData data = await rootBundle.load(join("assets", "db.sqlite"));
      List<int> bytes =
          data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
      await new File(path).writeAsBytes(bytes);

      // open the database
      db = await openDatabase(path, readOnly: false);
    } else {
      print("Opening existing database");
    }
    return db;
}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

добавить прослушиватели onCreate и onUpgrade.

var theDb = await openDatabase(path,
    version: 14, onCreate: _onCreate, onUpgrade: _onUpgrade);

void _onCreate(Database db, int version) async {
//load your db from assets
print("Created tables");
}
//Drop and create tables onUpgrade or Alter.
FutureOr _onUpgrade(Database db, int oldVersion, int newVersion) {
//code your changes to the db like alter table queries, or drop and create.
}
0 голосов
/ 16 января 2019

Вы можете сохранить свойство базы данных user_version и проверить, изменилось ли оно. Чтобы установить его, вы должны использовать PRAGMA user_version = {version};, а для запроса текущей версии вы должны использовать PRAGMA user_version;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...