1
我有以下表結構:sqlite的替換鍵和外鍵Android中
Table Days: [_id,date,name]
^
|
Table Events: [_id, day_id ,description]
外鍵day_id設置爲ON DELETE CASCADE
我想「插入或更新」 2天。所以我做:
ContentValues values= new ContentValues();
values.put("_id",2);
values.put("date,"...");
values.put("name","welcome");
mDb.replace("days",null,values);
的問題是,如果day_id = 2已經存在(在我的情況是最可能的選項)中用到dbengine刪除該表,並插入一個新行,因此所有的事件關聯到d ay也被刪除。
此解決方案的工作原理,但其非常不理想的權利?
try {
mDb.insertOrThrow("days", null, values);
} catch (Exception e) {
mDb.update("days", values, "_id=2", null);
}
請告訴我正確的sollution對於這個問題
謝謝您的回答。我不想更新day _id,只是「插入或更新」它,但該指令不存在於sqlite的權利? (如果在插入「已更新的」之前刪除舊行,則使用替換與天關聯的事件級聯刪除) – Addev 2012-04-16 12:55:19
如果更新主鍵,** ON UPDATE CASCADE **將自動反映其引用中的更改列,所以你不需要擔心刪除,然後插入它 – waqaslam 2012-04-16 13:00:36
,但如果列已經存在,替換命令會自動執行(刪除+插入)=( – Addev 2012-04-16 13:44:19