在 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
我已经更新了我的数据库结构,并将一个 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