flutter app升级时经常会升级数据库,如何检查数据库的版本号并根据版本号决定是否升级数据库,参考以下示例代码:
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) {
_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 (await db.getVersion() < NEW_DB_VERSION) { //需要升级
db.close();
//删除老版本的数据库
await deleteDatabase(path);
try {
await Directory(dirname(path)).create(recursive: true);
} catch (_) {}
//拷贝新数据库
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);
//打开新的数据库
db = await openDatabase(path);
//设置新的版本号
db.setVersion(NEW_DB_VERSION);
}
return db;
}
}
全部评论