我的问题是我需要读取一个现成的数据库。我决定使用 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;
}