我正在使用带有flutter应用程序的sqlflite,并且我拥有用于初始化数据库的此方法:
initDB() async{
String dbPath = await getDatabasesPath();
String path = join(dbPath, 'keemot.db');
var ourDB = await openDatabase(
path,
version: 1,
onCreate: _onCreat,
);
return ourDB;
}
这是_onCreate
方法:
void _onCreat(Database db, int version) async{
await db.execute(
'CREATE TABLE $_table ('
'$_columnId INTEGER PRIMARY KEY,'
'$_columnTite TEXT,'
'$_columnDate TEXT,'
'$_columnTime TEXT,'
'$_columnMonth INTEGER,'
'$_columnDay INTEGER,'
'$_columnReiteration INTEGER,'
'$_columnReiterationTarget TEXT,'
'$_columnNotification INTEGER,'
'$_columnNotificationTarget TEXT'
')'
);
}
我想添加另一个表,所以我做了以下事情:
void _onCreat(Database db, int version) async{
print ('creating ... version => $version');
await db.execute(
'CREATE TABLE $_table ('
'$_columnId INTEGER PRIMARY KEY,'
'$_columnTite TEXT,'
'$_columnDate TEXT,'
'$_columnTime TEXT,'
'$_columnMonth INTEGER,'
'$_columnDay INTEGER,'
'$_columnReiteration INTEGER,'
'$_columnReiterationTarget TEXT,'
'$_columnNotification INTEGER,'
'$_columnNotificationTarget TEXT'
');'
'CREATE TABLE $_settingsTable (' // I added the table to this method like so
'$_settingsColumnLang VARCHAR (3)'
');'
);
}
但是我遇到了这个异常:
DatabaseException(no such table: settings)
我已经用openDatabase()
方法更新了版本,我以为它会回忆起_onCreate()
方法,但是仍然会遇到相同的异常。
我应该如何更新数据库结构?
答案 0 :(得分:0)
我认为您应该两次调用db.execute
来创建两个单独的表。
对于这种情况,我也建议您提供onUpgrade
回调。您可以执行以下操作:
var ourDB = await openDatabase(
path,
version: 3,
onCreate: _onCreat,
onUpgrade: _onUpgrade
);
您的升级方法可能看起来像这样,以删除旧表并再次调用您的onCreate
方法:
_onUpgrade(Database db, int oldVersion, int newVersion) {
await db.execute("DROP TABLE IF EXISTS $_table");
_onCreat(db, newVersion);
}