首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用PRAGMA recursive_triggers

禁用PRAGMA recursive_triggers
EN

Stack Overflow用户
提问于 2018-12-06 09:49:47
回答 1查看 240关注 0票数 3

android机房文档声明PRAGMA recursive_triggers在默认情况下是启用的:

默认情况下,所有RoomDatabases都在临时表的内存存储中使用,并启用递归触发器。

当我使用insert with“onConflict(替换)”时,这会给我带来问题:如果(并且只有当) recursice_triggers启用时,这会触发我的onDelete触发器(参见SQLite文档):

替换..。当替换冲突解决策略删除行以满足约束时,如果启用递归触发器,则删除触发器触发.

我试图通过在db.execSQL("PRAGMA recursive_triggers = 0;"); ()中添加RoomDatabase.Callback.onCreate来禁用它,但这没有任何效果。

代码语言:javascript
复制
    public static synchronized FnsDatabase getInstance(Context context){
        if (instance == null) {
            instance = Room.databaseBuilder(context, MyDb.class, "mydb.db")
                    .addCallback(triggerCallback)
                    .build();
        }
        return  instance;
    }

    private static RoomDatabase.Callback triggerCallback = new RoomDatabase.Callback(){
        @Override
        public void onCreate(@NonNull SupportSQLiteDatabase db) {
            super.onCreate(db);

            // adding some triggers here

            db.execSQL("PRAGMA recursive_triggers = 0;");

        }
    };

有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 16:15:14

改为在RoomDatabase.Callback.onOpen()中调用它。它需要在框架的实用化设置之后进行。您也不需要方法重写中的super调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53648573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档