gpt4 book ai didi

database - 有没有办法使用 sqflite 检查 flutter 应用程序中的数据库版本?

转载 作者:行者123 更新时间:2023-12-05 08:39:15 24 4
gpt4 key购买 nike

我是 Flutter 的新手,我对数据库版本控制如何使用 sqflite 为这些应用程序工作有一些疑问。

我在我的 Assets 文件夹中创建了一个数据库文件,该文件会在应用启动时复制到用户的设备上。我想知道是否有任何方法可以检查用户拥有的数据库文件的当前版本,这样就不必每次都复制过来?

案例:我对 google play 商店中应用程序更新附带的数据库文件进行了更新。是否可以检查用户当前拥有的数据库文件的版本以确定新文件是否应该替换旧文件?

如果是这样...我可以在每次更新我的应用程序时都进行此检查吗?每次打开应用程序时都必须这样做吗?

如果不是.. 最好如何处理?处理存储在用户设备上的文件的数据库更新的最佳方式是什么?

最佳答案

SQFlite 已经有一个内置的版本管理,但是只有当你有一个迁移脚本时它才会起作用。对于你所说的,那可能不是你的情况。您需要手动管理版本控制:

    class DbHelper {
static const NEW_DB_VERSION = 2;

static final DbHelper _instance = DbHelper.internal();

factory DbHelper() => _instance;

DbHelper.internal();

Database _db;

Future<Database> get db async {
if (_db != null) {
return _db;
} else {
_db = await initDb();
return _db;
}
}

Future<Database> initDb() async {

final databasesPath = await getDatabasesPath();
final path = join(databasesPath, "database.db");

var db = await openDatabase(path);

//if database does not exist yet it will return version 0
if (await db.getVersion() < NEW_DB_VERSION) {

db.close();

//delete the old database so you can copy the new one
await deleteDatabase(path);

try {
await Directory(dirname(path)).create(recursive: true);
} catch (_) {}

//copy db from assets to database folder
ByteData data = await rootBundle.load("assets/databases/database.db");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(path).writeAsBytes(bytes, flush: true);

//open the newly created db
db = await openDatabase(path);

//set the new version to the copied db so you do not need to do it manually on your bundled database.db
db.setVersion(NEW_DB_VERSION);

}

return db;
}
}

关于database - 有没有办法使用 sqflite 检查 flutter 应用程序中的数据库版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60458746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com