Android中的Sqlite替换和外键

时间:2012-04-16 12:27:43

标签: java android sql sqlite

我有以下表结构:

Table Days:          [_id,date,name]
                       ^
                       |
Table Events: [_id, day_id ,description]

外键day_id设置为ON DELETE CASCADE

我想"插入或更新"第二天。所以我做了:

ContentValues values= new ContentValues();
values.put("_id",2);
values.put("date,"...");
values.put("name","welcome");
mDb.replace("days",null,values);

问题是如果day_id = 2已经存在(在我的情况下是最可能的选项),DBengine会删除该表并插入一个新行,以便删除与该日相关的所有事件。

这个解决方案有效,但它非常不理想吗?

    try {
        mDb.insertOrThrow("days", null, values);
    } catch (Exception e) {
        mDb.update("days", values, "_id=2", null);
    }

该问题的正确解决方法

1 个答案:

答案 0 :(得分:1)

您应该添加如下引用,以便SQLite自动删除或更新引用的列。

  

FOREIGN KEY [_id] REFERENCES [天] ON DELETE CASCADE ON UPDATE   CASCADE