更改的 Table 列无法使用 Greendao-Android 访问

Altered Table Column is not able to access using Greendao-Android

在 SQLiteOpenHelper 中使用 onUpgrade,我可以更改 table 并添加具有默认值的新列名。

但是当我访问 activity 中的特定 table 时,它每次更改只显示旧列 count.As,它应该显示 4(列数)。但它显示仅 3 个。

我在 onUpgrade 方法中的代码:

 db.execSQL("ALTER TABLE " + MyTableDaoDao.TABLENAME + " ADD COLUMN 'VRESION_NO' INTEGER NOT NULL DEFAULT '11';");

// 因为我确定 table 已更改,因为当我尝试使用相同的列名再次更改它时,它显示重复的列名 sqlite 异常。

获取所有列数:

 daoSession.getMyTableDao().getAllColumns().length  // returns old table count

如何在 GreenDAO 中获取刷新的 table 详细信息?。 有没有人遇到过这种情况。

提前致谢。

我唯一能想到的是你从错误的地方得到列 table。

您可以尝试删除 table 然后用新列重新创建它,也许它会注册。还认为以这种方式编写动态代码更容易。 (只需将列添加到字符串列表并在创建 table 时循环遍历它)。

可能您忘记了从更新的架构中重新创建您的 Dao 代码。

Greendao 不使用反射或扫描数据库来创建数据库和 java 之间的映射。此映射由 dao 生成器创建。所以如果你想更新你的数据库模式有两个任务:

  1. 通过使用新模式重新创建它们来更新实体-类 和 daos 并增加模式版本。
  2. 在您的应用程序中实施您的更新策略,即删除所有表并重新创建它们或 add/change/remove columns/tables/indexes/... 自之前处于活动状态的架构版本以来已更改(请参阅我的答案 here and here).