2
我正在使用SQLiteDatabase作爲Java庫,並且需要支持非常低版本的Android API(v4),它不支持帶有支持外鍵的SQLite版本。涉及子查詢的SQLiteDatabase刪除
因此,爲了刪除數據的頂層片和所有它的「孩子」,我需要以這樣的方式之前刪除這些孩子手動複製相同的效果外鍵約束ON DELETE CASCADE
什麼我試圖做的是與刪除API下面的SQL。
DELETE FROM childTable
WHERE someFK IN (
SELECT parent_id
FROM parentTable
WHERE someFlag = 1
)
我想出了最初的解決方案是硬編碼在選擇查詢我的where子句如下,但是由於SQLiteDatabase API支持查詢的,execSQL等,這是解決方案,我用可怕的錯誤和危險的使用? 解決方法:
String[] whereArgs = {Integer.toString(1)};
this.database.delete(TABLE_CHILD_ONE, COL_ONE_FK_SESSION+" IN (SELECT "+COL_SESSION_ID+" FROM "+TABLE_SESSIONS+" WHERE "+COL_SESSION_DONE+"=?)", whereArgs);
this.database.delete(TABLE_CHILD_TWO, COL_TWO_FK_SESSION+" IN (SELECT "+COL_SESSION_ID+" FROM "+TABLE_SESSIONS+" WHERE "+COL_SESSION_DONE+"=?)", whereArgs);
this.database.delete(TABLE_CHILD_THREE, COL_THREE_FK_SESSION+" IN (SELECT "+COL_SESSION_ID+" FROM "+TABLE_SESSIONS+" WHERE "+COL_SESSION_DONE+"=?)", whereArgs);