android机房文档声明PRAGMA recursive_triggers在默认情况下是启用的:
默认情况下,所有RoomDatabases都在临时表的内存存储中使用,并启用递归触发器。
当我使用insert with“onConflict(替换)”时,这会给我带来问题:如果(并且只有当) recursice_triggers启用时,这会触发我的onDelete触发器(参见SQLite文档):
替换..。当替换冲突解决策略删除行以满足约束时,如果启用递归触发器,则删除触发器触发.
我试图通过在db.execSQL("PRAGMA recursive_triggers = 0;"); ()中添加RoomDatabase.Callback.onCreate来禁用它,但这没有任何效果。
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;");
}
};有人能帮我解决这个问题吗?
发布于 2018-12-06 16:15:14
改为在RoomDatabase.Callback.onOpen()中调用它。它需要在框架的实用化设置之后进行。您也不需要方法重写中的super调用。
https://stackoverflow.com/questions/53648573
复制相似问题