我有两个表:航迹和航点,一个航迹可以有多个航点,但一个航点只分配给一个航迹。
在way points表中,我有一个名为“track_ID _I”的列,它会在创建轨道后插入trackidfk,但是我没有在该列上设置外键约束。
当我删除一个轨迹时,我想删除指定的路点,这是可能的吗?我读到过关于使用触发器的文章,但我不认为Android支持触发器。
要创建路径点表,请执行以下操作:
public void onCreate(SQLiteDatabase db) {
db.execSQL( "CREATE TABLE " + TABLE_NAME
+ " ("
+ _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ LONGITUDE + " INTEGER,"
+ LATITUDE + " INTEGER,"
+ TIME + " INTEGER,"
+ TRACK_ID_FK + " INTEGER"
+ " );"
);
...
}
发布于 2012-09-21 21:52:30
从Android4.1(API16)开始,SQLiteDatabase支持:
public void setForeignKeyConstraintsEnabled (boolean enable)
发布于 2013-12-22 23:19:45
正如来自e.shishkin的帖子所说,从API16开始,您应该使用db.setForeignKeyConstraintsEnabled(boolean)
在SqLiteOpenHelper.onConfigure(SqLiteDatabase)
方法中启用外键约束
@Override
public void onConfigure(SQLiteDatabase db){
db.setForeignKeyConstraintsEnabled(true);
}
发布于 2016-10-26 10:10:39
用一个更完整的答案来回答这个问题永远不会太老。
@Override public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
if (!db.isReadOnly()) {
setForeignKeyConstraintsEnabled(db);
}
mOpenHelperCallbacks.onOpen(mContext, db);
}
private void setForeignKeyConstraintsEnabled(SQLiteDatabase db) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
setForeignKeyConstraintsEnabledPreJellyBean(db);
} else {
setForeignKeyConstraintsEnabledPostJellyBean(db);
}
}
private void setForeignKeyConstraintsEnabledPreJellyBean(SQLiteDatabase db) {
db.execSQL("PRAGMA foreign_keys=ON;");
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setForeignKeyConstraintsEnabledPostJellyBean(SQLiteDatabase db) {
db.setForeignKeyConstraintsEnabled(true);
}
https://stackoverflow.com/questions/2545558
复制相似问题