【问题标题】:Altered Table Column is not able to access using Greendao-Android更改表列无法使用 Greendao-Android 访问
【发布时间】:2015-11-30 22:33:37
【问题描述】:

使用 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 中获取刷新后的表详细信息? 有没有人遇到过这种情况。

提前致谢。

【问题讨论】:

    标签: android android-sqlite greendao greendao-generator


    【解决方案1】:

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

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

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

    【讨论】:

    • 这似乎是正确的。你的意思是,如果我有一个现有的表,其中包含 _id、名称、电子邮件等字段和一个现有的 DAO 文件,那么如果我改变我的表,比如添加一个新列“年龄”应该重新创建新的 DAO,并替换现有 DAO 的文件,对吗?
    • 谢谢!我不知道要更新“schema_version”,文档在哪里?我是 greendao 的新手,感觉很多文档都非常缺乏
    • @batoutofhell 参见schemadatabase setupOpenHelper。摇滚;)
    【解决方案2】:

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

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

    【讨论】:

    • 我想保留旧数据并添加具有默认值的新列。因此无法删除表。此外,我在资产文件夹中有数据库,它在开始时被复制。那么如何解决呢?
    • 添加带有引号的列时出现错误。所以试试 ALTER TABLE " + MyTableDaoDao.TABLENAME + " ADD COLUMN VRESION_NO INTEGER NOT NULL DEFAULT '11';
    • 其实问题是表修改后的数据插入。它没有显示任何错误并作为空值插入。
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多