【问题标题】:OnUpgrade SQFLITE: Unhandled Exception: DatabaseException(table UsernameTable has no column named rememberMe (Sqlite code 1):OnUpgrade SQFLITE: Unhandled Exception: DatabaseException(table UsernameTable has no column named rememberMe (Sqlite code 1):
【发布时间】:2019-10-12 21:42:38
【问题描述】:

未处理的异常:DatabaseException(table UsernameTable has no 名为 rememberMe 的列(Sqlite 代码 1):,编译时:INSERT OR REPLACE INTO UsernameTable (username, rememberMe) VALUES (?, ?), (OS 错误 - 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)""");
}

【问题讨论】:

  • 你在oldVersion 和newVersion (_onUpgrade) 中得到了什么值。我猜onUpgrade 中的查询没有被调用。
  • 如何调用onUpgrade?​​span>
  • 我添加在initDB()..
  • 尝试将 version 中的 openDatabase() 更改为 5 或更高版本。您的数据库似乎出现了错误的情况。
  • 我在我的代码中做了。不是吗?

标签: sqlite flutter dart flutter-dependencies sqflite


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2023-02-07
    • 2013-05-22
    • 2022-11-20
    • 2020-10-23
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多