0

我的问题是我需要读取一个现成的数据库。我决定使用 Moor 包更好地处理数据库。

该应用程序专为离线工作而设计。我要单独下载数据库放到项目中,所有对数据库中数据执行的动作都会记录在另一个本地存储中,例如json格式,然后在连接互联网时发送到服务器. 在 Moor 包的文档中,我没有找到有关此实现的具体信息。告诉我如何在现成的数据库上构建数据模型,在这种情况下向哪个方向移动更好?也许 Moor 不太适合我这样做,还有一些更合理的解决方案?

这是我按照文档尝试做的事情,但是我需要做的是,我不明白我是否需要在代码中描述现成的数据库模型,或者 Moor 可以以某种方式基于现成的数据库生成它们:


import 'package:moor/moor.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:moor_flutter/moor_flutter.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
import 'package:moor/ffi.dart';

part 'moor_database.g.dart';

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    // put the database file, called db.sqlite here, into the documents folder
    // for your app.
    final dbFolder = await getApplicationDocumentsDirectory();
    final file = File(p.join(dbFolder.path, 'app.db'));

    if (!await file.exists()) {
      // Extract the pre-populated database file from assets
      final blob = await rootBundle.load('assets/database/my_database.db');
      Uint8List blobUint8List = blob.buffer.asUint8List(blob.offsetInBytes, blob.lengthInBytes);
      await file.writeAsBytes(blobUint8List);
    }

    return VmDatabase(file);
  });
}

@UseMoor()
class AppDatabase extends _$AppDatabase{
  AppDatabase() : super(_openConnection());

  @override
  int get schemaVersion => 1;

}
4

0 回答 0