android - 无法使用 RoomDatabase.query 更新 sqlite_sequence 表

标签 android android-room

我们尝试使用以下代码更新 sqlite_sequence

WeNoteRoomDatabase weNoteRoomDatabase = WeNoteRoomDatabase.instance();
weNoteRoomDatabase.query(new SimpleSQLiteQuery("UPDATE sqlite_sequence SET seq = 0 WHERE name = 'attachment'"));

然而,它根本没有作用。我使用 SQLite 浏览器检查 sqlite_sequence 表内容。计数器不会重置为 0。

如果我们尝试在同一个 SQLite 文件上使用 SQLite 浏览器手动运行相同的查询,它工作得很好。

我们的房间数据库非常简单。

@Database(
    entities = {Attachment.class},
    version = 6
)
public abstract class WeNoteRoomDatabase extends RoomDatabase {
    private volatile static WeNoteRoomDatabase INSTANCE;

    private static final String NAME = "wenote";

    public abstract AttachmentDao attachmentDao();

    public static WeNoteRoomDatabase instance() {
        if (INSTANCE == null) {
            synchronized (WeNoteRoomDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(
                        WeNoteApplication.instance(),
                        WeNoteRoomDatabase.class,
                        NAME
                    )
                        .build();
                }
            }
        }

        return INSTANCE;
    }
}

知道我们错过了什么吗?


附加信息:clearing sqlite_sequence is not working in android room

最佳答案

房间 不使用 SQLiteDatabase - 但它使用 SupportSQLiteDatabase , 而它是 source code声明,它将所有调用委托(delegate)给 {@link SQLiteDatabase} 的实现......我什至可以进一步挖掘 - 但我相信,这是一个一致性功能而不是错误。

SQLiteDatabase.execSQL() 仍然工作正常,但是使用 SupportSQLiteDatabase.execSQL() 相同的 UPDATEDELETE 对内部表的查询没有效果,也不会抛出错误。

我的 MaintenanceHelperGitHub 上可用.重要的是一开始让 Room 创建数据库 - 然后可以使用 SQLiteDatabase.execSQL() 操作内部表。在研究时我遇到了注释 @SkipQueryVerification ,这可能可能允许UPDATEDELETEsqlite_sequence;我只设法用 Dao 执行了一个 SELECT... 通常,内部表的所有提示都被视为 只读,从公开可用的API的角度来看;所有的操纵尝试都被默默地忽略了。

关于android - 无法使用 RoomDatabase.query 更新 sqlite_sequence 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573731/

相关文章:

android - 在 Google Drive App 文件夹中存储房间数据库?

java - 房间@查询错误 : Cannot find method parameters

android - 如何在使用 Room 时立即获取查询结果?

android - RecyclerView Item装饰间距和跨度

android - 图库 Activity imageLoader 出错

android - Room - 为什么使用@Relation 而不是@ForeignKey?

kotlin - 房间插入一对多关系

Android 主题错误的

java - 如何重复倒数计时器一定次数

java - 使用 Proguard 转换类和资源时出错