1

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

但是当我访问活动中的那个特定表时,它只显示旧的列数。根据更改,它应该显示 4(列数)。但它只显示 3。

我在 onUpgrade 方法中的代码:

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

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

要获取所有列数:

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

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

提前致谢。

4

2 回答 2

1

可能您忘记从更新的模式重新创建您的 dao 代码。

Greendao 不使用反射或扫描数据库来创建数据库和 java 之间的映射。这个映射是由 dao-generator 创建的。因此,如果要更新数据库架构,有两个任务:

  1. 通过使用新模式重新创建实体类和 daos 并增加模式版本来更新它们。
  2. 在您的应用程序中实施您的更新策略,即删除所有表并重新创建它们或添加/更改/删除自之前处于活动状态的模式版本以来已更改的列/表/索引/...(请参阅我的答案herehere)。
于 2015-11-27T23:12:54.430 回答
0

我唯一能想到的就是您从错误的表中获取列。

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

于 2015-11-27T08:55:43.267 回答