gpt4 book ai didi

android - 我应该在 onOpen 还是 onConfigure 中启用外键约束

转载 作者:IT王子 更新时间:2023-10-29 06:31:38 25 4
gpt4 key购买 nike

我遇到了不同的代码 fragment ,关于在 SQLiteHelper 中启用外键约束。我在想,如果我也想支持 API < 16,我是否应该在 onOpenonConfigure 中启用外键约束。

这个讨论表明 onOpen 是正确的地方,在 API 16 之前:Foreign key constraints in Android using SQLite? on Delete cascade

但是,从 API 16 开始,官方文档确实提到 onConfigure 是正确的地方。

public void setForeignKeyConstraintsEnabled (boolean enable)
...
A good time to call this method is right after calling openOrCreateDatabase(File, SQLiteDatabase.CursorFactory) or in the onConfigure(SQLiteDatabase) callback.

我可以知道 API 16 和 <16 的单一入口点是什么吗?

@Override 
public void onOpen(SQLiteDatabase database) {
super.onOpen(database);
if (!database.isReadOnly()) {
// Enable foreign key constraints
db.execSQL("PRAGMA foreign_keys=ON;");
}
}

// https://stackoverflow.com/questions/13641250/sqlite-delete-cascade-not-working
@SuppressLint("NewApi")
@Override
public void onConfigure(SQLiteDatabase database) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
database.setForeignKeyConstraintsEnabled(true);
} else {
database.execSQL("PRAGMA foreign_keys=ON");
}
}

最佳答案

onConfigure()将是理想的,但它仅在 API 16 及更高版本上调用。如果你的minSdkVersion 16岁或以上,使用它。

onOpen()有一个问题,它只在可能的 onCreate() 之后被调用/onUpgrade()等等 如果你在 onCreate() 中有 SQL/onUpgrade()这需要强制执行外键,在 onOpen() 中设置外键编译指示为时已晚.对于 minSdkVersion < 16 , 请考虑以下内容:

  • 始终在 onOpen() 中启用外键.

  • 如果您的 onCreate()/onUpgrade()需要强制执行外键,也在那里启用它们。启用它们两次并没有什么坏处。

关于android - 我应该在 onOpen 还是 onConfigure 中启用外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22791217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com