【问题标题】:How to map NUMERIC SQLite type in Room?如何在 Room 中映射 NUMERIC SQLite 类型?
【发布时间】:2019-10-06 05:18:10
【问题描述】:

我有一个无法更改或迁移的 SQLite 数据库,需要使用 Room 将 NUMERIC 列映射到我的 Kotlin 类。我需要使用什么作为 Kotlin 类中字段的数据类型?当使用 Boolean、Integer、Double、String 时,它会失败并显示类似的错误消息:

Expected:
TableInfo{name='calendars', columns={monday=Column{name='monday', type='REAL', affinity='4', ...}
 Found:
TableInfo{name='calendars', columns={monday=Column{name='monday', type='NUMERIC', affinity='

编辑: 我想可以更新数据库并更改列类型。但我仍然想知道是否有办法将NUMERIC 与 Room 进行映射。

【问题讨论】:

  • 你试过 BigDecimal 吗?
  • @williamxyz 是的,但它不能编译,要我添加一个转换器。但如果我不能将字段映射到任何东西,我就不能做转换器。
  • 我有一个无法更改或迁移的 SQLite 数据库。您可以更改(非破坏性),这样做的示例(将布尔值或字节更改为 INTEGER)在这里Can't migrate a table to Room do to an error with the way booleans are saved in Sqlite

标签: android sqlite orm android-room


【解决方案1】:

如果您有一个现有的数据库,请使用 SQLite 浏览器打开它,通过选择表并编辑它来更改数据类型(将类型更改为 REAL)。这样可以保留数据,之后您可以再次使用数据库。

目前,Room 映射这些数据类型似乎存在问题,因此您必须在数据库中显式使用 REAL。

另外,最好分别在数据对象中注释您的字段。

@ColumnInfo(typeAffinity = ColumnInfo.REAL)
public double yourField;

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 2016-08-18
    • 1970-01-01
    • 2021-09-23
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多