使用SQLite在Android的外键约束? Delete(删除)级联 [英] Foreign key constraints in Android using SQLite? on Delete cascade

查看:1762
本文介绍了使用SQLite在Android的外键约束? Delete(删除)级联的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个表:曲目和航点,轨迹可以有多个航点,而是一个航点分配到只有1个轨道。

在路上积分榜我有一个名为trackidfk的插入track_ID一旦轨道由专栏,但是我还没有建立外键约束在此列。

当我删除曲目我想删除指定的航点,这是可能的?我读了有关使用触发器,但我不认为他们在Android的支持。

要创建的航点表:

 公共无效的onCreate(SQLiteDatabase DB){
    db.execSQL(CREATE TABLE+ TABLE_NAME
                +(
                + _ID +INTEGER PRIMARY KEY AUTOINCREMENT,
                +经度+INTEGER
                +纬度+INTEGER
                +时间+INTEGER
                + TRACK_ID_FK +整数
                +);
              );

    ...
}
 

解决方案

与删除级联外键约束的支持,但你需要启用它们。
我只是增加了以下我的 SQLOpenHelper 的,这似乎这样的伎俩。

  @覆盖
公共无效的OnOpen(SQLiteDatabase DB){
    super.onOpen(DB);
    如果(!db.isReadOnly()){
        //启用外键约束
        db.execSQL(杂foreign_keys = ON;);
    }
}
 

我宣布我引用列如下:

  mailbox_id INTEGER参考邮箱ON DELETE CASCADE
 

I have two tables: tracks and waypoints, a track can have many waypoints, but a waypoint is assigned to only 1 track.

In the way points table I have a column called "trackidfk" which inserts the track_ID once a track is made, however I have not setup Foreign Key constraints on this column.

When I delete a track I want to delete the assigned waypoints, is this possible?. I read about using Triggers but I don't think they are supported in Android.

To create the waypoints table:

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"
                + " );"
              );

    ...
}

解决方案

Foreign key constraints with on delete cascade are supported, but you need to enable them.
I just added the following to my SQLOpenHelper, which seems to do the trick.

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

I declared my referencing column as follows.

mailbox_id INTEGER REFERENCES mailboxes ON DELETE CASCADE

这篇关于使用SQLite在Android的外键约束? Delete(删除)级联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆