【发布时间】:2021-06-22 08:53:17
【问题描述】:
我想更新一个已经在 Google Play 上发布的应用程序,但事先我想测试一下本地 sqlite 数据库是否会在更新后保留它的所有数据,因为它存储用户添加的内容。
首先,我在旧版本的数据库中添加了一些内容,然后对其进行了更新。当我通过内部测试更新应用程序时,它没有显示任何数据,就好像它会创建一个空的新数据库一样。
- db 路径是否可能已更改?如何检查?
- 会不会是旧的数据库被覆盖了?
还有什么我应该注意的吗?因为我只在数据库中添加了几列,并没有更改任何有关数据库初始化和数据库路径的代码。
使用的包:sqflite: 2.0.0+3 和 path: 1.8.0
数据库 dart 文件中的代码 sn-p :
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite/sqlite_api.dart';
class DatabaseHelper{
/// ------- name variables ----------------
static final _dbName = 'userTasks.db';
static final _dbVersion = 2;
static final _tableName = 'myTasks';
/// ------- table column Names -------------
static final columnID = 'id';
static final columnName = 'name';
static final columnContent = 'content';
static final columnType = 'type';
static final columnDescription = 'description';
static final columnFavorite = 'favorite';
/// -------- DataBase initialization ---------
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database _database;
Future<Database> get database async{
if(_database !=null) return _database;
_database = await _initiateDatabase();
return _database;
}
_initiateDatabase () async{
Directory directory = await getApplicationDocumentsDirectory();
String path = join(directory.path,_dbName);
return await openDatabase(path, version: _dbVersion, onCreate: _onCreate, onUpgrade: _onUpgrade);
}
/// --------------- _onCreate() getting called on fresh install(no previous DB) -----------------
Future _onCreate(Database db, int version){
db.execute(
'''
CREATE TABLE $_tableName(
$columnID INTEGER PRIMARY KEY,
$columnName TEXT,
$columnContent TEXT NOT NULL,
$columnType TEXT NOT NULL,
$columnDescription TEXT NOT NULL,
$columnFavorite INTEGER)
'''
);
}
/// --------------- _onUpgrade() getting called on _dbVersion versionChange -----------------
Future _onUpgrade(Database db, int oldVersion, int newVersion) {
db.execute(''' ALTER TABLE $_tableName ADD COLUMN $columnDescription TEXT''');
db.execute(''' ALTER TABLE $_tableName ADD COLUMN $columnFavorite INTEGER DEFAULT 0 ''');
}
提前致谢!
【问题讨论】:
-
一个很好的创建数据库表的方法是添加
CREATE TABLE IF NOT EXISTS ...,以防同名表已经存在 -
感谢您的建议,现在我至少可以确定它不会覆盖/替换旧数据库
标签: flutter dart testing google-play-console sqflite