2014-07-24 53 views
0

當我的應用程序第一次安裝時,我以編程方式創建數據庫。迄今爲止工作良好。但是當我想添加一個觸發器時,我得到一個異常說「IF附近的語法錯誤」。問題是,我無法跨越源代碼中多行的字符串。那我能做些什麼呢?Sqlite:以編程方式創建觸發器

private void createTriggers(SQLiteDatabase database) { 

    final String triggerLocationArchived = "CREATE TRIGGER location_archived AFTER UPDATE ON location FOR EACH ROW BEGIN IF NEW.deleted <> OLD.deleted THEN UPDATE sector set sector.deleted = NEW.deleted WHERE sector.location = NEW._id; END IF; END;"; 

    database.execSQL(triggerLocationArchived); 
} 

有兩個表:位置和扇區。每個都有一個INTEGER標誌,指示該行是否已被歸檔。所以我希望所有的孩子(一個地點內的部門)都歸檔,如果父母(地點)歸檔。

回答

1

試試這個命令:

CREATE TRIGGER location_archived 
AFTER UPDATE ON location 
FOR EACH ROW 
WHEN NEW.deleted <> OLD.deleted 
BEGIN 
    UPDATE sector 
    set deleted = NEW.deleted 
    WHERE location = NEW._id; 
END 

您的代碼將是這樣的:

private void createTriggers(SQLiteDatabase database) { 

    final String triggerLocationArchived = "CREATE TRIGGER location_archived AFTER UPDATE ON [location] FOR EACH ROW WHEN NEW.deleted <> OLD.deleted BEGIN UPDATE sector set deleted = NEW.deleted WHERE location = NEW._id; END"; 

    database.execSQL(triggerLocationArchived); 
} 
+0

Java源代碼 – Matthias

+1

格式化僅僅是爲了顯示內多條線路,則不能定義一個字符串。你的命令是錯誤的。例外,「IF附近的語法錯誤」發生,因爲你不能使用「if」,再看一遍,我把「if」改爲「when」。刪除格式並放入您的代碼。它會工作。 – JoeyRA

+0

哦,我錯過了那部分。現在嘗試過,但也不起作用。現在它說錯誤「near」WHEN「:語法錯誤」 – Matthias

相關問題