【发布时间】:2018-12-27 12:18:19
【问题描述】:
我正在尝试关闭然后重新打开 Room 数据库。 (目的是备份SQLite文件)
这就是我关闭它的方式:
public static void destroyInstance() {
if (INSTANCE != null && INSTANCE.isOpen()) {
INSTANCE.close();
}
INSTANCE = null;
}
INSTANCE 是一个 RoomDatabase 对象
要重新打开,我将通过调用再次初始化 INSTANCE 对象:
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, C.ROOM_DB_NAME)
在我转移到另一个活动后,我在 logcat 中看到了这个错误:E/ROOM: Invalidation tracker is initialized twice
SELECT 查询工作正常,但 INSERT 失败并出现以下错误:
E/SQLiteLog: (1) no such table: room_table_modification_log
E/ROOM: Cannot run invalidation tracker. Is the db closed?
java.lang.IllegalStateException: The database '/data/user/0/ro.example.example/databases/mi_room.db' is not open.
虽然 INSTANCE.isOpen() 返回 true
房间版本:1.1.1
有人知道这个“room_table_modification_log”表是什么吗?
【问题讨论】:
-
您找到解决方案了吗?我在 Room 2.2.5 中仍然遇到此错误。
-
没有解决办法。我只是不再关闭数据库。如果要将DB文件复制到其他位置,可以查看下面的答案(schv09的答案)
-
@MickeyR 你有解决办法吗,我也遇到这个错误
-
@AlexBusuioc 的任何解决方案我在 2.3.0 版中遇到此错误
-
没有重新打开以前关闭的房间数据库的解决方案。我只是不再关闭数据库。检查@schv09 的答案或这个问题可能会有所帮助:stackoverflow.com/questions/50987119/backup-room-database
标签: android android-sqlite android-room