flutter中sqflite如何升级表结构?

码云
2020-11-24 09:28

sqflite本身是不支持直接修改表结构的,如果不借助于其他工具的话,你可以按照以下步骤修改升级表结构:

  • 升级数据库版本号
  • 在onUpgrade方法中拷贝数据库数据到临时表
  • 删除要升级的表
  • 创建新表结构
  • 从临时表拷贝回数据
  • 删除临时表

这样做比较繁琐,我们可以借助于第三方依赖包实现表结构的修改升级,参考以下示例代码:

引入包:

dependencies:
  sqflite_migration: ^0.2.0

代码:

import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite_migration/sqflite_migration.dart';

//数据库初始化脚本
final initialScript = [
  '''
create table _todo_list (
  id integer primary key autoincrement,
  alias text not null
  )
''',
  '''
create table _task (
  id integer primary key autoincrement,
  description text,
  todo_list_id integer not null,
  CONSTRAINT fk_todo_lists
    FOREIGN KEY (todo_list_id)
    REFERENCES _todo_list(id)
);
'''
];

//数据库升级脚本
final migrations = [
  '''
  alter table _task add column done integer default 0;
  '''
];

//升级配置对象
final config = MigrationConfig(initializationScript: initialScript, migrationScripts: migrations);

Future<Database> open() async {
 final databasesPath = await getDatabasesPath();
 final path = join(databasesPath, 'test.db');
 //打开数据库并初始化以及完成升级
 return await openDatabaseWithMigration(path, config);
}

 

全部评论