首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SQLite的安卓系统中的外键约束?关于删除级联

使用SQLite的安卓系统中的外键约束?关于删除级联
EN

Stack Overflow用户
提问于 2010-03-30 21:32:13
回答 8查看 67.2K关注 0票数 91

我有两个表:航迹和航点,一个航迹可以有多个航点,但一个航点只分配给一个航迹。

在way points表中,我有一个名为“track_ID _I”的列,它会在创建轨道后插入trackidfk,但是我没有在该列上设置外键约束。

当我删除一个轨迹时,我想删除指定的路点,这是可能的吗?我读到过关于使用触发器的文章,但我不认为Android支持触发器。

要创建路径点表,请执行以下操作:

代码语言:javascript
复制
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"
                + " );"
              );

    ...
}
EN

回答 8

Stack Overflow用户

发布于 2012-09-21 21:52:30

从Android4.1(API16)开始,SQLiteDatabase支持:

代码语言:javascript
复制
public void setForeignKeyConstraintsEnabled (boolean enable)
票数 56
EN

Stack Overflow用户

发布于 2013-12-22 23:19:45

正如来自e.shishkin的帖子所说,从API16开始,您应该使用db.setForeignKeyConstraintsEnabled(boolean)SqLiteOpenHelper.onConfigure(SqLiteDatabase)方法中启用外键约束

代码语言:javascript
复制
@Override
public void onConfigure(SQLiteDatabase db){
    db.setForeignKeyConstraintsEnabled(true);
}
票数 26
EN

Stack Overflow用户

发布于 2016-10-26 10:10:39

用一个更完整的答案来回答这个问题永远不会太老。

代码语言:javascript
复制
@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);
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2545558

复制
相关文章

相似问题

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