2015-09-17 99 views
0

我在刪除表中的行時遇到問題。無法刪除鏈接表中的行

我有2個表,定義如下:

private static final String DATABASE_TABLEELEMENTS = "elements"; 
    public static final String KEY_ROWELEMENTID = "_id"; 
    public static final String KEY_STUDYID = "idstudy"; 
    public static final String KEY_ELEMENTCODE = "code_element"; 
    public static final String KEY_ELEMENTNAME = "description_element"; 


private static final String DATABASE_TABLETIME = "times"; 
    public static final String KEY_ROWTIME = "_id"; 
    public static final String KEY_ELEMENTID = "idelement"; 
    public static final String KEY_HOURDATE = "hour_date"; 
    public static final String KEY_OBSERVEDYTIME = "observedtime"; 
    public static final String KEY_OBSERVEDACTIVITY = "observedactivity"; 

兩個表是相關的:

elements._id = times.idelement 

我想刪除其中具有從「idstudy」表「倍」的所有行用戶選擇的表「元素」:

爲此我創建了以下功能:

public void ResetDataStudies(String selectedid) { 
    String querytimes = "DELETE FROM " 
    + "times" 
    + " WHERE " 
    + "times.idelement" 
    + " IN " 
    + "(SELECT " 
    + "elements._id" 
    + " FROM " 
    + "elements" 
    + " WHERE " 
    + "elements.idstudy = ?)"; 
    ourDatabase.rawQuery(querytimes, new String[] { selectedid }); 
} 

我沒有收到一個特定的錯誤,但是在執行它之後,數據還沒有被刪除。

看到的數據類型如下:

db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" + 
        KEY_ROWELEMENTID + " INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, " + 
        KEY_ELEMENTCODE + " INTEGER NOT NULL, " + 
        KEY_ELEMENTNAME + " TEXT, " + 
        KEY_STUDYID + " TEXT NOT NULL REFERENCES " + DATABASE_TABLEACOUNT + "("+ KEY_ROWSTUDYID +") ON DELETE CASCADE ");  

      db.execSQL(" CREATE TABLE " + DATABASE_TABLETIME + " (" + 
        KEY_ROWTIME + " INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, " + 
        KEY_HOURDATE + " INTEGER NOT NULL, " + 
        KEY_OBSERVEDYTIME + " TEXT NOT NULL, " + 
        KEY_OBSERVEDACTIVITY + " TEXT NOT NULL, " + 
        KEY_ELEMENTID + " TEXT NOT NULL REFERENCES " + DATABASE_TABLEELEMENTS + "("+ KEY_ROWELEMENTID +") ON DELETE CASCADE "); 
     }   

我已經更新了我的發言,但現在我收到一個錯誤在創建表:

錯誤附近級聯聲明

+0

該查詢看起來。顯示一些示例數據,以及每個值的數據類型。 –

回答

0

當您創建表,外鍵需要爲ON DELETE CASCADE。例如

FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES "+DATABASE_TABLEELEMENTS+" ("+KEY_ROWELEMENTID+") ON DELETE CASCADE); " 

你還必須告訴SQLite強制外鍵(否則它們被忽略)。

PRAGMA foreign_keys = ON; 

參見https://www.sqlite.org/foreignkeys.html