2

未处理的异常:DatabaseException(表 UsernameTable 没有名为 rememberMe 的列(Sqlite 代码 1):,编译时:INSERT OR REPLACE INTO UsernameTable(用户名,rememberMe)值(?,?),(操作系统错误 - 2:没有这样的文件或目录)) sql 'INSERT OR REPLACE INTO UsernameTable (username, rememberMe) VALUES (?, ?)' args [term@melfs, 1]}

我升级了我的数据库。我在表中添加了新列UsernameTable。但它不起作用。我在这个数据库中已经有很多记录了。我不能drop所以我如何将新列添加到现有数据库。我用了Sqflite

 initDb() async {
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "HelperDatabase.db");
    var theDb = await openDatabase(path, version: 4, onCreate: _onCreate, onUpgrade: _onUpgrade);
    return theDb;
  }

OnUpgrade 方法。

 void _onUpgrade(Database db, int oldVersion, int newVersion)async{
  if(oldVersion != 5){
      await db.execute("ALTER TABLE UsernameTable ADD COLUMN rememberMe INTEGER DEFAULT 0");
    }
  }

onCreate 方法

  void _onCreate(Database db, int version) async {
 await db.execute("""CREATE TABLE UsernameTable(username STRING)""");
}
4

1 回答 1

0

您需要确保数据库版本匹配才能访问数据库。验证是否_onUpgrade()正在调用似乎传递了新版本的方法。如果您考虑这样做,也可以在 sqflite 上打开期间进行自动版本管理。

于 2021-09-02T15:09:07.733 回答