在 Room Migrations 中访问旧的 Room 数据库

Accessing old Room database in Room Migrations

我已经更新了我的数据库结构,并将一个 DB(我们称之为 DB 1)中包含的数据移动到另一个 DB(我们称之为 DB 2)的 table。

如何在房间迁移中获取旧数据库 (DB 1) 的实例以将数据从 DB 1 移动到在 DB 2 中创建的新table?

谢谢大家

假设两个数据库都在设备上,您有两个选择:-

您可以使用 [openDatabase][1] 方法将其作为 SQLiteDatabase 打开,完成后显然会关闭它。

  • 此方法不允许通过 SQL 直接 copying/moving 您将提取到 Cursor 中,然后从 Cursor 加载。

您也可以在数据移动后 ATTACH the old to the new ensuring that you DETACH。请注意,在访问旧数据库(已附加)时,使用 schema name 可能至关重要。

  • 这确实有助于使用 SQL 直接复制。
  • 请注意,DATABASE 是数据库的路径,它应该用单引号引起来。例如main_sdb.execSQL("ATTACH DATABASE '" + other_sdb.getPath() + "' AS other"); main_sdb 是一个 SupportSQliteDatabase 实例(传递给迁移),在这种情况下,从另一个这样的实例中检索要附加的数据库的路径。架构名称是 other