从 Room DB 到 SQLITE 的数据库迁移

问题描述 投票:0回答:1

我之前已经实现了 Room DB。后来我将其更新为 SQLITE,添加了一些列。现在我想为它编写迁移。这将是一次降级迁移,因为 Room 是 Sqlite 的包装类。任何帮助将不胜感激

android android-sqlite android-room
1个回答
0
投票

要从 Room 迁移到 SQLite,就 SQLite 而言,您不需要执行任何操作,因为底层数据库是 SQLite 数据库。

但是,如果您进行了架构更改(添加了列),然后想要在 Room 中使用更改后的 SQLite 数据库,那么您将需要在相应的

@Entity
带注释的类(表)中反映这些更改。

应该注意的是,Room 比 SQLite 限制更多/灵活性更差,它可能不仅需要更改

@Entity
带注释的类,bay 可能需要转换以适应 Room 的限制性质。

作为 SQLite 中的示例,您可以将列设置为

 thecolumn VARCHAR(50)
。 Room 只允许类型为 INTEGER、TEXT、REAL、BLOB 或 null。

@Entity
中,您可能会拥有
val theColumn: String?
(Kotlin)。

在上述场景中,您不能简单地使用 SQLite 数据库,您必须:

  • ALTER 表以删除列,然后 ALTER 表以添加列(注意 SQLite ALTER TABLE 语句的限制),或者
  • 重命名表,然后创建表,最好使用在成功编译项目并进行相应更改后从生成的 java 复制的语句,然后使用重命名的原始故事中的数据填充替换(创建)表,这然后可以被丢弃。
    • 后一种方法应该可以更好地应对,因为 ALTER TABLE 限制不适用。
    • 生成的 SQL 可以在 java(生成)文件夹(通过 Android 视图可见)中找到,该类与
      @Database
      注解的类同名,但后缀为
      _Impl
      。在类中会有一个方法
      createAllTables
      每个组件的 SQL 与 Room 所期望的完全一样。

您可能希望查看房间中的数据类型已更改,如何进行迁移?,这使用了第二种/后一种方法(即重命名原始表等)。

© www.soinside.com 2019 - 2024. All rights reserved.