我需要在本地数据库中创建新表并删除其他表,但是只更改数据库版本并不起作用,它不会创建我需要的新表。
以同样的方式,我已经尝试了onUpgrade,但它没有工作
Future<Database> get database async{
if( _database != null )return _database;
_database = await initDB();
return _database;
}
initDB()async {
Directory documentDirectory = await getApplicationDocumentsDirectory();
String path = join( documentDirectory.path, 'DB.db' );
var ouDb = await openDatabase(path, version: 2,onCreate: onCreate, onUpgrade: onUpgrade);
return ouDb;
}
FutureOr<void> onCreate(Database db, int version) async {
await db.execute('CREATE TABLE nameTable0...');
db.execute("DROP TABLE IF EXISTS NameTable1");
db.execute("DROP TABLE IF EXISTS NameTable2");
}
FutureOr<void> onUpgrade(Database db, int oldVersion, int newVersion) async{
if (oldVersion < newVersion) {
await db.execute('CREATE TABLE NameTable3 ...');
}
//onCreate(db, newVersion);
}
4条答案
按热度按时间ru9i0ody1#
您需要使用
onUpgrade
yhived7q2#
我想这会帮助你...
在代码中的任何位置调用它。
hl0ma9xz3#
尝试添加Future作为返回类型,并删除查询中的分号。
oknrviil4#
我看到很多答案解释了在
openDatabase
中执行以下检查:这将在执行第一次数据库升级时生效(即版本1到2),但在执行第二个(比如2到3),因为表“CUSTOMER”已经创建。所以您需要逻辑来只调用一次升级。此外,您可能使用的是版本10的数据库,而用户使用的是版本5,所以您只需要处理6、7、8、9和10。下面是我为处理这些场景而构建的逻辑: