我正在构建一个使用 sqflite^2.0.2 将数据存储为本地数据库的应用程序。
一切正常,但在设备上更新应用程序时出现问题:所有数据都丢失了。一旦应用程序升级或重新安装,数据库似乎就会被删除。其行为与 Android 模拟器上的行为相同。
我已经尝试在
AndroidManifest.xml中添加
android:allowBackup="true"
,即使 - 如 documentation 所示 - 应该备份数据库,它仍然无法工作。
由于数据库结构没有更新,只是实际的 Flutter 应用程序更新了,所以数据库版本应该保留 1(?)。
static Future<Database> init() async {
WidgetsFlutterBinding.ensureInitialized();
final database = openDatabase(
join(await getDatabasesPath(), 'myDatabase.db'),
onCreate: (db, version) {
return db.execute(
'CREATE TABLE myOrders (id TEXT PRIMARY KEY, name TEXT, quant INTEGER)',
);
},
version: 1,
);
return database;
}
上面的代码初始化我的数据库,
join()
返回以下路径:/data/user/0/com.example.myapp/databases/myDatabase.db
不幸的是,这没有帮助:https://stackoverflow.com/a/62845264/11442598
我错过了什么吗?如有任何帮助,我们将不胜感激。
首先,我尝试使用 path_provider 来确保数据库每次都使用正确的路径。这不起作用,但对于 iOS 来说这仍然是一个很好的做法正如 sqflite 所推荐的那样。
下一步是将数据库重命名为其他名称,也许数据库的实例不止一个(?)。然后我删除并再次下载我的 Android 模拟器,选择一个已安装
Google Play 。
最后我添加了
<application android:allowBackup="true"/>
串入AndroidManifest.xml
flutter clean
和
flutter pub get
。经过几次尝试,数据不再丢失了。