我们有一个完全由Flutter构建的应用程序。当我们将应用程序升级发送到谷歌商店时,在Android设备中更新apk时sqflite数据库数据不会丢失。但在iOS设备中,用户将应用程序更新到新版本后,所有数据库数据都丢失了。
class DatabaseHelper {
static DatabaseHelper _databaseHelper; // Singletone DatabaseHelper
static Database _database; // Singletone Database
String wifiSystemTable = 'wifi_system_table';
String colId = 'id';
String colDataType = 'data_type';
String colLocationName = 'location_name';
String colBackground = 'background';
String colLocationId = 'location_id';
String colDeviceType = 'device_type';
String colIp = 'ip';
String colName1 = 'name1';
String colName2 = 'name2';
String colName3 = 'name3';
String colRemotePort = 'remote_port';
DatabaseHelper._createInstance(); // Named constractor to create instance of Database Helper
factory DatabaseHelper() {
if (_databaseHelper == null) {
_databaseHelper = DatabaseHelper
._createInstance(); //This is execute only once, singletone object
}
return _databaseHelper;
}
Future<Database> get database async {
if (_database == null) {
_database = await initializeDatabase();
}
return _database;
}
Future<Database> initializeDatabase() async {
//Get the directory path for both Android and IOS to store Database
Directory directory = await getApplicationDocumentsDirectory();
String path = p.join(directory.toString(), 'wifi.db');
//Open/create the database at the given path
var wifiSystemDatabase =
await openDatabase(path, version: 1, onCreate: _createDb);
return wifiSystemDatabase;
}
void _createDb(Database db, int newVersion) async {
await db.execute(
'CREATE TABLE $wifiSystemTable($colId INTEGER PRIMARY KEY, $colDataType INTEGER, $colLocationName TEXT, $colBackground TEXT, $colLocationId INTEGER, $colDeviceType INTEGER, $colIp TEXT, $colName1 TEXT, $colName2 TEXT, $colName3 TEXT, $colRemotePort TEXT)');
}
谢谢
我想你的数据库路径正在改变。试试这个。
Future<Database> initializeDatabase() async {
//Get the directory path for both Android and IOS to store Database
String databasesPath = await getDatabasesPath();
String path = p.join(databasesPath, 'wifi.db');
//Open/create the database at the given path
var wifiSystemDatabase = await openDatabase(path, version: 1, onCreate: _createDb);
return wifiSystemDatabase;
}
希望有帮助:)
问题内容: 我已经在Google Store中有一个应用程序。我正在使用具有3个表的内置数据库,并在应用程序首次启动时将其复制。现在,我想升级到该应用程序并添加另一个表。下面是我的代码。 我想问几个问题。上面的代码未升级。 现在,如果我是该应用程序的新用户,是否需要编辑旧数据库并制作另一个CKRecording表,并用放置在资产中的当前数据库替换该数据库,或者上述代码也适用于新用户? 问题答案:
根据文档,来自的room实例应该保存的数据是persist。但还是迷路了。我的项目必须数据库 第一个数据库 @database(实体=[foodmodel::class],version=4,exportSchema=false)抽象类FoodDatabase:RoomDatabase(){ 第二数据库 抽象类MyFoodDatabase:RoomDatabase(){abstract val M
我已经尝试了一切我知道但不能解决这个问题 运行输出 : 在调试模式下启动 moto g 40 融合上的利布\主.飞镖...正在运行 Gradle 任务“组装演示”...√ 已构建版本\app\outputs\flutter-apk\app-debug.apk.D/颤动定位服务(30742):正在创建服务。D/颤振定位服务(30742):绑定到位置服务。调试服务侦听 ws://127.0.0.1:5
该API主要受Android ContentProvider的启发,其中典型的SQLite实现意味着在第一个请求时打开数据库一次,并保持其打开状态。 就我个人而言,我的Flutter应用程序中有一个全局参考数据库,以避免锁问题。如果多次调用,打开数据库应该是安全的。 如果引用丢失(并且数据库尚未关闭),只在小部件中保留引用可能会导致热重新加载问题。
根据Hazelcast官方文档,从版本3.8开始支持滚动升级。 如果我的服务器版本是3.5,是否有办法创建一个成功的集群,其中新的盒子运行较新版本的Hazelcast? 天真地升级到3.6。*导致了两个不同的集群(旧的盒子仍然运行3.5,而另一个新的盒子运行3.6,显然没有数据,因为它永远无法与现有的盒子接触)。 我的部署过程如下: 创建一组新框 我的想法是在磁盘/数据库上存储快照,并在推出时从数
我正在处理一个spring boot应用程序,我想把从2.9.10.2升级到2.10.2。下面是我的pom.xml片段和升级依赖项后得到的错误: pom.xml: null